Waldo(php代码审计-用户输入过滤不严)
info enum
1 |
|
web
该web,很简单,有4个php script,分别用来读、写、删除文件。
1 |
|
Trying
try1:
php版本:Powered-By: PHP/7.1.16(响应头)
中间件版本:nginx/1.12.2
怀疑php反序列化,复习一下
参考资料:
初识php反序列化
确认输入点,是post传输。先记录下,post传输的参数字段。
1 |
|
然后,删除主目录下所有文件;burp抓包,post发送数据listnum=1&data={"1":"New%20Item"}
,给fileWrite.php。
发现,主目录下成功生成一个新文件。
PHP中会调用一个函数serialize(),它接收一个给定的数组作为输入参数,并能够将数组的内容转换成正常的字符串,然后你就可以将字符串内容保存在一个文件中,也可以作为URL的一个输入值,等等。
确认反序列化漏洞。
try2: openssh用户枚举
python ssh.py --port 22 --outputFile 87.txt --userList /usr/share/wordlists/linux-user.txt 10.10.10.87
try3: 通过反序列化漏洞进行命令执行
我知道是用户输入未验证导致的问题,但不知道如何利用。还是经验不够。
writeup:
/dirRead.php当时发现了如图所示的“列目录”,也尝试了“../../../../etc/passwd”,但网页提示false,于是就不知道怎么办了。
想过是否泄露源代码,通过http://ip/dirRead.php
去访问,当然不行,网页是空白的。
1 |
|
1 |
|
1 |
|
如何解析json格式数据?
sed 's/\\n/\n/g' < fileRead.php | sed 's/\\t/\t/g' | sed 's/\\//g'
将“\n”替换为换行符,“\t”替换为制表符,斜杠替换为空。
1 |
|
php代码分析
fileRead.php
1 |
|
str_replace()函数:
如果搜索的字符串是数组,那么它将对数组中的每个元素进行查找和替换。
将file参数输入的数../
或..
替换为空。
所以../../etc/passwd
,会替换为etc/passwd
dirRead.php
1 |
|
scandir() 函数返回指定目录中的文件和目录的数组。
获取敏感信息
1 |
|
本来想直接列user.txt,但可能有权限问题,提示false。
1 |
|
file=….//….//….//….//home/nobody/.ssh/authorized_keys
ssh密钥文件
获得shell
1 |
|
遇到一个错误。
是id_rsa权限问题
1 |
|
今天也是菜菜的一天,继续加油吧~~