发现Facebook SSRF,收获31500美元赏金的故事【1】

admin 2024年10月18日09:08:14评论19 views字数 2070阅读6分54秒阅读模式

 

前言

这是一个4年前白帽发现的漏洞,虽然已经过去了4年之久,但这个漏洞的挖掘方式和思路依然值得我们学习,让我们开始吧。

信息收集

通过子域枚举,发现一处子域“ https://m-nexus.thefacebook.com/ ”,访问该子域会重定向到“ https://m-nexus.thefacebook.com/servlet/mstrWebAdmin” :

发现Facebook SSRF,收获31500美元赏金的故事【1】

通过关键字mstrWebAdmin搜索 ,发现这是基于MicroStrategy工具构建的商业智能门户:

发现Facebook SSRF,收获31500美元赏金的故事【1】

从MicroStrategy的官方配置文档中,可以发现有两个端点允许公开访问:

发现Facebook SSRF,收获31500美元赏金的故事【1】

进一步查看 MicroStrategy 的官方配置文档,发现默认情况下(URL:“ https://m-nexus.thefacebook.com/servlet/mstrWeb ”)上启用了 HTTP 基本身份验证,但“ https://m-nexus.thefacebook.com/servlet/taskProc ”却无需身份验证

站点从“ taskId ”参数中获取值来执行一些自定义数据收集和内容生成。

通过使用 Intruder,可以几乎每个请求都会检查有效的身份验证的会话参数,但在处理短 URL 的“ shortURL ”不会检查有效的身份验证会话。

发现Facebook SSRF,收获31500美元赏金的故事【1】

发现Facebook SSRF,收获31500美元赏金的故事【1】

模糊测试

对官方文档中提到的所有参数进行模糊测试,没有收获。并且每次会给出一条错误消息“The source URL is not valid(源 URL 无效)”,状态代码为 500。

于是考虑下载该 Web 应用程序尝试源代码审计,这是一个400多MB的应用程序包,里面包含了几个脚本和jar文件:

发现Facebook SSRF,收获31500美元赏金的故事【1】

利用jd-gui工具反编译 jar 文件就可以进行代码审计了。既然是处理短 URL时不检查有效的身份验证会话,那么就尝试寻找短URL的 Java 类吧。

发现Facebook SSRF,收获31500美元赏金的故事【1】

通过源代码可以得知,“ shortURL ”任务的“ srcURL ”参数必须使用“ https://tinyurl.com/ ”创建的URL来导入数据或从中读取数据才行,否则就会报“The source URL is not valid”错误:

发现Facebook SSRF,收获31500美元赏金的故事【1】

漏洞利用

基于上述了解,接下来就简单了:

  1. 打开 Burp suite ,选择“Burp Collaborator client”,生成Payloads:
    发现Facebook SSRF,收获31500美元赏金的故事【1】
  2. 打开“https://tinyurl.com/” 输入Payloads并创建其相应的短URL:
    发现Facebook SSRF,收获31500美元赏金的故事【1】
  3. 在“srcURL”参数中插入复制的“tiny URL”,然后浏览器访问:
    https://m-nexus.thefacebook.com/servlet/taskProc?taskId=shortURL&taskEnv=xml&taskContentType=json&srcURL={YOUR_TINY_URL_HERE}

发现Facebook SSRF,收获31500美元赏金的故事【1】

  1. 查看Burp Collaborator,顺利收到IP请求:
    发现Facebook SSRF,收获31500美元赏金的故事【1】

SSRF利用

接着创建无效内部 IP 地址的短 URL(例如 123.10.123.10),将其插入“srcURL”参数中,并观察服务器是否有响应:

发现Facebook SSRF,收获31500美元赏金的故事【1】

再创建有效的内部 IP 地址 (127.0.0.1:8080) 的短 URL,将其插入“srcURL”参数中,再次观察服务器响应:

发现Facebook SSRF,收获31500美元赏金的故事【1】

SSRF成功,上报Facebook,但却收到了Facebook的“拒绝”答复:

发现Facebook SSRF,收获31500美元赏金的故事【1】

Facebook认为服务器的响应信息并不是一个安全漏洞。

继续深入

于是只好尝试使用诸如 (file://、dict://、ftp://、gopher:// 等)以读取服务器内部信息,同时还尝试了获取云实例的元数据,均没能成功。

沮丧了很久后,终于想出了一些具有影响力的攻击场景:

  1. 反射型XSS

发现Facebook SSRF,收获31500美元赏金的故事【1】

  1. 利用SSRF进行的钓鱼攻击

首先创建并托管 Facebook 登录的网络钓鱼页面,然后窃取受害者的 Facebook 登录凭据:

发现Facebook SSRF,收获31500美元赏金的故事【1】

接着打开“ https://tinyurl.com/ ”,创建托管网络钓鱼页面的短 URL,即“ http://ahmedabadexpress.co.in/fb/login/fb.html ”

发现Facebook SSRF,收获31500美元赏金的故事【1】

在“srcURL”参数中插入复制的“tiny URL”并发送给受害者,当受害者访问后:

发现Facebook SSRF,收获31500美元赏金的故事【1】

一旦受害者在该页面上输入TA的用户名和密码,就会被保存到“ http://ahmedabadexpress.co.in/fb/login/usernames.txt ”文件中。

然后受害者会被重定向到真实的 Facebook 登录页面,一切看起来都是那么的“合法”。

访问“ http://ahmedabadexpress.co.in/fb/login/usernames.txt ” URL 查看窃取的受害者凭证:

发现Facebook SSRF,收获31500美元赏金的故事【1】

  1. 内部指纹探测:

既然能够通过SSRF扫描服务器的内部网络,那么通过 burp suite intruder 发送超过 10000 个以上的请求来查找服务器上的开放端口或在该端口上运行的应用程序也是可行的。

发现Facebook SSRF,收获31500美元赏金的故事【1】

经过一番扫描,发现在10303端口上有一个名为“ LightRay ”的应用程序:

发现Facebook SSRF,收获31500美元赏金的故事【1】

Facebook 安全团队很快便修复了该漏洞。

发现Facebook SSRF,收获31500美元赏金的故事【1】

原文始发于微信公众号(骨哥说事):发现Facebook SSRF,收获31500美元赏金的故事【1】

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月18日09:08:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   发现Facebook SSRF,收获31500美元赏金的故事【1】http://cn-sec.com/archives/3283605.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息