我是如何入侵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)或类似高危漏洞

信息收集

  1. 目录枚举:

    • 使用fuzzing工具扫描子域目录结构
    • 发现多个返回403状态的目录,表明存在大量功能端点:
      /tapprd/
      /tapprd/content/
      /tapprd/services/
      /tapprd/Content/
      /tapprd/api/
      /tapprd/Services/
      /tapprd/temp/
      /tapprd/logs/
      ...
      
  2. JavaScript分析:

    • 仔细阅读网站JS文件以理解工作流程
    • 发现绕过SSO重定向的方法: https://legal.tapprd.thefacebook.com/tapprd/portal/authentication/login

关键漏洞点

  1. 密码重置端点:

    • 发现两个关键端点:
      • /tapprd/auth/identity/user/forgotpassword
      • /savepassword (POST请求)
  2. 漏洞本质:

    • 密码重置API对任何人开放,无身份验证
    • 相当于未授权访问端点

漏洞利用步骤

手动测试

  1. 尝试直接修改POST请求参数:

    • 包含CSRF令牌和新密码
    • 初始测试返回"执行此操作失败"错误
  2. 猜测需要有效邮箱地址:

    • 开始收集可能的邮箱列表
    • 使用Burp Intruder进行批量测试

自动化测试

  1. 使用Burp Intruder:

    • 发送带有CSRF令牌和随机邮箱+新密码的请求到/savepassword
    • 观察响应:
      • 大多数返回错误
      • 部分返回302重定向到登录页面(成功标志)
  2. 验证成功:

    • 使用测试邮箱和新密码尝试登录
    • 成功进入管理面板

影响扩大

  • 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

防御建议

对开发者的建议

  1. 身份验证:

    • 所有敏感操作(如密码重置)必须进行身份验证
    • 实现多因素认证机制
  2. 令牌验证:

    • 密码重置令牌应:
      • 一次性使用
      • 有时效限制
      • 与特定用户会话绑定
  3. 速率限制:

    • 对密码重置请求实施速率限制
    • 防止暴力破解尝试
  4. 日志记录:

    • 记录所有密码重置尝试
    • 监控异常活动

对安全测试人员的建议

  1. API测试:

    • 重点关注未授权访问端点
    • 测试所有API的身份验证要求
  2. 密码重置流程测试:

    • 验证令牌是否可预测或重复使用
    • 检查是否可绕过身份验证
  3. 信息收集:

    • 彻底分析JS文件
    • 完整枚举应用程序端点

总结

本案例展示了即使在大公司如Facebook的子系统中,也可能存在简单的认证绕过漏洞。关键在于:

  1. 全面的信息收集
  2. 仔细分析应用程序逻辑
  3. 对看似小的漏洞点进行深入测试
  4. 理解漏洞的潜在影响范围

这种类型的漏洞虽然技术复杂度不高,但由于其潜在的高影响(特别是涉及员工账户时),通常能获得较高的漏洞赏金。

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状态的目录,表明存在大量功能端点: 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重定向到登录页面(成功标志) 验证成功: 使用测试邮箱和新密码尝试登录 成功进入管理面板 影响扩大 Facebook员工使用工作账号登录该系统 攻击者可获取Facebook工作账户访问令牌 可能导致更广泛的Facebook内部系统访问 漏洞利用脚本 防御建议 对开发者的建议 身份验证 : 所有敏感操作(如密码重置)必须进行身份验证 实现多因素认证机制 令牌验证 : 密码重置令牌应: 一次性使用 有时效限制 与特定用户会话绑定 速率限制 : 对密码重置请求实施速率限制 防止暴力破解尝试 日志记录 : 记录所有密码重置尝试 监控异常活动 对安全测试人员的建议 API测试 : 重点关注未授权访问端点 测试所有API的身份验证要求 密码重置流程测试 : 验证令牌是否可预测或重复使用 检查是否可绕过身份验证 信息收集 : 彻底分析JS文件 完整枚举应用程序端点 总结 本案例展示了即使在大公司如Facebook的子系统中,也可能存在简单的认证绕过漏洞。关键在于: 全面的信息收集 仔细分析应用程序逻辑 对看似小的漏洞点进行深入测试 理解漏洞的潜在影响范围 这种类型的漏洞虽然技术复杂度不高,但由于其潜在的高影响(特别是涉及员工账户时),通常能获得较高的漏洞赏金。