0x01 例题
这儿举例安恒的一道月题
tips:利用ssrf,gopher打内网
0x02 贴出代码
<?php
highlight_file(__FILE__);
$x = $_GET['x'];
$pos = strpos($x,"php");
if($pos){
exit("denied");
}
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,"$x");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
echo $result;
0x03分析过程
首先x我们可以控制,
x可利用的协议有gopher、dict、http、https、file等
file协议可以用于查看文件
dict协议可以用于刺探端口
gopher协议支持GET&POST请求,常用于攻击内网ftp、redis、telnet、smtp等服务,还可以利用gopher协议访问redis反弹shell
首先我们利用file读取文件
先上脚本扫描一下目录,得到flag.php。
一般我们还可以读取/etc/hosts,/etc/passwd,~/.bash_history等文件查看线索
但是代码中有strpos的限制(利用%2570绕过)
最后我们读取/var/www/html/flag.php时发现线索

继续读取/etc/hosts得到一个内网地址

这儿我们得到内网段,我们可以继续扫描,发现只有172.18.0.1|2|3可以访问。
http://101.71.29.5:10012/?x=http://172.18.0.2的返回结果如下图,存在LFI漏洞。

这只是80端口的结果,接下来我们看看其他端口的开放情况,可以看到,25端口也开放了,25对应的就是smtp服务。
于是可以联想到利用gopher协议打smtp,然后再结合之前发现的LFI漏洞,得出这样的思路
利用gopher打smtp,在日志文件中留下一句话木马,然后用LFI包含日志文件获取webshell
思路清晰了后,就开始执行了,先用gopherus脚本生成payload,gopherus地址:https://github.com/tarunkant/Gopherus,里面有详细用法。

将127.0.0.1:25改为内网地址,然后url编码发送过去
然后我们利用包含日志文件
于是我们现在可以去找smtp的日志文件位置了,一般来讲linux中的邮件日志文件路径为
- /var/log/maillog
- /var/log/mail.log
- /var/adm/maillog
- /var/adm/syslog/mail.log

然后我们直接连接菜刀查看flag
0x04 总结
1、https://bugs.php.net这是一个包含php漏洞的网址
例如我们可以利用谷歌语法搜索
site: [https://bugs.php.net](https://bugs.php.net) strpos
2、ssrf一般先探测主机,然后探测端口,找到对应服务,再利用相应的payload
0x05 链接
复现的题目的时候,环境关了,所以直接用了另外一名师傅的writeup图片,这儿贴出链接,见谅!
链接
本文通过实战案例,展示了如何利用SSRF漏洞和Gopher协议进行渗透测试,包括读取敏感文件、探测内网服务及利用SMTP服务反弹Shell的过程。文章深入分析了利用不同协议进行攻击的方法,并给出了具体的代码实现。
1万+

被折叠的 条评论
为什么被折叠?



