挖洞经验 | 价值$10000的Facebook SSRF漏洞
字数 1252 2025-08-15 21:33:04
Facebook SSRF漏洞挖掘与分析教程
漏洞概述
本教程详细分析了一个价值$10,000的Facebook SSRF(Server-Side Request Forgery,服务端请求伪造)漏洞的发现过程。通过子域名枚举、文件枚举和代码审计等技术手段,研究者成功构造了有效的服务端请求,实现了对Facebook内部系统的探测。
漏洞发现流程
1. 子域名枚举
技术要点:
- 使用子域名枚举工具对Facebook网站进行测试
- 重点关注返回403(禁止访问)状态的子域名
- 发现关键子域名:phishme.thefacebook.com
经验:
- 403响应可能隐藏着有价值的信息或漏洞入口
- 同一研究者曾通过类似方法发现过Facebook的其他高危漏洞
2. JS脚本文件枚举
技术实现:
- 使用通用字典库进行JS文件枚举
- 枚举路径格式:
https://phishme.thefacebook.com/**.js - 发现隐藏JS文件:
Home.js
关键点:
- 字典的选择直接影响枚举效果
- 隐藏的JS文件可能包含敏感逻辑或API端点
3. 代码审计与分析
发现的关键函数:
Util.sendPhishRequest('PhishGetItemData.ashx', {
itemId: itemId,
ewsUrl: ewsUrl,
token: token
})
函数分析:
- 函数通过XHR方式发送请求
- 参数结构:
itemId: 项目IDewsUrl: 外部服务URLtoken: 认证令牌
- 该函数可能用于获取钓鱼相关数据
漏洞利用
构造恶意请求
有效载荷:
https://phishme.thefacebook.com/PhishGetItemData.ashx?itemId=123&ewsUrl=http://127.0.0.1:PORT/&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7Hg
参数说明:
itemId: 设置为任意值(如123)ewsUrl: 设置为目标内部服务地址(如127.0.0.1)token: 使用有效的JWT令牌
漏洞利用效果
- 服务端返回405(方法不被允许)响应
- 响应中包含stack-traces栈跟踪信息
- 通过变换端口和参数可探测内部服务配置
潜在危害:
- 内部网络探测
- 服务指纹识别
- 敏感信息泄露
- 内部服务攻击跳板
漏洞修复时间线
| 日期 | 事件 |
|---|---|
| 2020.8.7 | 漏洞上报 |
| 2020.8.11 | 漏洞分类和补丁发布 |
| 2020.12.3 | 漏洞修复完成并发放奖励 |
技术总结与防御建议
漏洞成因
- 未对用户提供的URL进行严格验证
- 内部服务错误信息暴露过多细节
- 敏感端点未实施足够访问控制
防御措施
-
输入验证:
- 严格校验用户提供的URL参数
- 限制请求只能访问允许的外部域名
-
错误处理:
- 避免在错误响应中返回敏感信息
- 统一错误页面,不暴露堆栈跟踪
-
访问控制:
- 对内部API端点实施严格身份验证
- 使用白名单限制可访问的资源
-
监控与日志:
- 记录异常的SSRF尝试
- 设置针对内部地址请求的警报
学习要点
- 子域名枚举是发现漏洞的有效入口
- 隐藏的JS文件可能包含关键业务逻辑
- 403响应值得深入分析
- 代码审计需要关注所有外部请求函数
- SSRF漏洞的严重性常被低估,实际危害大
通过本案例,安全研究人员可以学习到从信息收集到漏洞利用的完整链条,以及企业级应用中SSRF漏洞的挖掘思路和防御方法。