<?php highlight_file(_FILE_); $x = $_GET['x']; $pos = strpos($x,"php"); if($pos){ exit("denied"); } $ch=curl_init(); cur1_setopt($ch,CURLOPT_URL,"$x"); cur1_setopt($ch,CURLOPT_RETURNTRANSFER,true); $result = curl_exec($ch); echo Sresult; ?>
思路:
◆可利用的协议有gopher、dict、http、https、file等
◆file协议可以用于查看文件
◆dict协议可以用于刺探端口
◆gopher协议支持GET&POST请求,常用于攻击内网ftp、redis、telnet、smtp等服务,还可以利用gopher协议访问redis反弹shel1

绕过strops,对p进行url二次编码绕过p->%70->%2570


最后发现172.18.0.1/2/3可以访问,其中172.18.0.2存在文件包含漏洞

再次利用BurpSuite探测该内网IP开放端口,发现存在25端口smtp服务
利用思路,利用Gopher协议发送一句话木马请求,污染其日志文件,最后通过文件包含漏洞将日志文件包含拿到shell。
工具利用Gopherus:https://github.com/tarunkant/Gopherus,该工具可快速生成指定Payload,python2下执行
root@iZ2ze0vvr76o932bopx4kxZ:~/SSRF工具/Gopherus-master# python gopherus.py -h usage: gopherus.py [-h] [--exploit EXPLOIT] optional arguments: -h, --help show this help message and exit --exploit EXPLOIT mysql, fastcgi, redis, smtp, zabbix, pymemcache, rbmemcache, phpmemcache, dmpmemcache

最后将IP地址改为目标IP即可

但是木马肯定是无法直接执行的,我们的目的也是使该请求记录写到smtp的日志记录中。

Smtp常见日志文件位置:
◆/var/log/maillog
◆/var/log/mail.log
◆/var/adm/maillog
◆/var/adm/syslog/mail.log
