Hackit2017-B3tterS0ci4lN3twork-writeup
命令注入
wget-cve利用
Task
|
|
有一个注册Register功能,和登陆Auth功能。
在注册完成并登录后,会跳到profile.php页面:
右上角有Send Message和Get Message功能。我们试着写一条信息发送给自己:
然后到Get Message功能处,发现是存在XSS漏洞的。
但经过一番测试,这里没办法进一步的利用。回到profile.php。这里有两个功能,一个是修改密码,另一个是根据你填入的图片地址获得Your avatar。
这里我们填上一张放在自己服务器上的图片
提交后用burp看一下:
查看服务器log,发现是wget/1.15:
所以服务器端应该是用wget 我们填入图片的地址,然后保存到avatars/yourhost/xx.jpg。而且只允许jpg/png/gif。若是php文件,在被wget完成后检测后会被删除。
Solution1
从上面的图片来看,假设后端的wget语句(约莫)如下:
而$url是我们可以控制的,那可以尝试注入比如换行符,比如令$URL=http://xx.com/a.jpg\nwhoami
,让后端执行时变成:
从而导致命令注入。经过fuzz,换行符\n
没有过滤,制表符\t
没有过滤可用来代替空格。
我们在自己的服务器上放一个jpg文件,之所以用jpg做后缀是因为在wget完后,wget命令会检测指定后缀名,若不是,则会删掉。
其内容是:
服务器端将使用wget将图片下载到 avatars/yourhost/xx.jpg 的位置,然后我们再利用bash去加载avatars/yourhost/xx.jpg来获得一个shell。最后的exp如下:
|
|
然后在自己的服务器上监听端口:
运行python脚本,得到shell。
flag:
Solution2
wget的版本是1.15,这个在pwnhub-another-php中出现过,利用CVE-2016-7098
参考文章:Wget-Exploit-ACL-bypass-RaceCond-CVE-2016-7098
也就是说利用竞争条件,在wget的链接还没结束前,它对后缀名的检测就不会触发,这样赶在这段时间内服务器wget后的webshell其实是存在的。
但我没成功。