SuperAPI AI 工具集

hunt-mfa-bypass

安全与审计

查看项目

更新于 10-16 07:46

技能介绍

用途

本技能面向安全测试人员,用于系统性地发现和验证 MFA / 2FA(多因素 / 双因素认证)绕过漏洞。MFA 绕过是一类不断增长的漏洞类型,当它能在攻击者没有既有会话的情况下实现账户接管(ATO)时,通常被评为 High 或 Critical。技能归纳了 7 种不同的绕过模式,并给出对应的测试手法。

主要能力(7 种模式)

模式 1:OTP 无速率限制 使用 ffuf 遍历全部 100 万个 6 位验证码。示例命令:

ffuf -u "https://target.com/api/verify-otp" \
  -X POST -H "Content-Type: application/json" \
  -H "Cookie: session=YOUR_SESSION" \
  -d '{"otp":"FUZZ"}' \
  -w <(seq -w 000000 999999) \
  -fc 400,429 -t 5

其中 -t 5 用于放慢速度,过于激进的速率会触发 429 或封禁。

模式 2:OTP 使用后未失效

  1. 登录 → 收到 OTP "123456" → 输入 → 成功;
  2. 登出 → 用相同凭据再次登录;
  3. 再次尝试 OTP "123456";
  4. 若被接受,说明 OTP 从未失效,攻击者嗅探一次即可永久复用,构成 ATO。

模式 3:响应篡改

  1. 输入错误 OTP → 在 Burp 中捕获响应;
  2. 将 {"success":false} 改为 {"success":true}(或将 401 改为 200);
  3. 转发 → 若应用继续执行,说明 MFA 检查仅在客户端。

模式 4:跳过 MFA 步骤(工作流绕过) 输入密码后,应用会设置一个 "pre-mfa" cookie 并重定向到 /mfa。测试时直接跳过 /mfa,用 pre-mfa cookie 访问 /dashboard:

curl -s -b "session=PRE_MFA_SESSION" https://target.com/dashboard

若应用在未完成 MFA 的情况下授予访问权限,即为认证流程绕过,属 Critical。

模式 5:MFA 验证竞态 使用 asyncio 与 aiohttp 同时提交同一 OTP:

import asyncio, aiohttp

async def verify(session, otp):
    async with session.post("https://target.com/api/mfa/verify",
                            json={"otp": otp}) as r:
        return r.status, await r.text()

async def race():
    cookies = {"session": "YOUR_SESSION"}
    async with aiohttp.ClientSession(cookies=cookies) as s:
        results = await asyncio.gather(verify(s, "123456"), verify(s, "123456"))
        print(results)
asyncio.run(race())

模式 6:备用码暴力破解 备用码通常为 8 位字母数字(36^8 ≈ 2.8 万亿,过大);但需检查备用码是否仅为 6-8 位数字(100 万至 1000 万范围,在无速率限制下可行)。同时测试:备用码耗尽后能否复用;部分应用的备用码是否可预测地重新生成。

模式 7:"记住此设备"信任提升

  1. 在设备 A(攻击者浏览器)完成一次 MFA;
  2. 捕获 "remember device" cookie;
  3. 从新 IP / 浏览器提交该 cookie;
  4. 若 MFA 被跳过,说明设备信任未绑定 IP / UA,可从任意位置实现 ATO。

严重性判定

  • 速率限制绕过 + 无锁定 = ATO(Critical)
  • 响应篡改 = 仅客户端检查 = Critical
  • 跳过 MFA 步骤 = 认证流程绕过 = Critical
  • OTP 复用 = 持久会话劫持 = High

相关技能与链式组合

  • hunt-ato:MFA 绕过是原语,ATO 是目标。链式原语:cookie 窃取(经 XSS 或会话固定)+ 密码预言机(登录响应时间 / 长度差异泄露有效密码且无锁定)+ 密码修改端点无 MFA 升级 = 持久 ATO,无需面对 OTP 挑战 → 密码被轮换,攻击者将受害者锁在门外。
  • hunt-race-condition:模式 5(OTP 竞态)属于竞态条件领域,应同时加载两个技能。链式原语:同一 6 位 OTP 通过 20 条并行 HTTP/2 流(单包 Turbo Intruder 攻击)在服务器标记其已使用前提交 → 1 次成功 + 19 次 "already-used" → 竞态窗口确认 → 攻击者无需暴力,只需猜一次并并行化 → ATO。
  • hunt-auth-bypass:跳过 MFA 步骤是工作流层的认证流程绕过。链式原语:密码步骤后签发 pre-MFA cookie + 直接导航到 /dashboard 跳过 /mfa 路由 + 服务器仅对 /mfa 而非 /dashboard 做中间件门控 = 从仅密码状态获得完整认证后访问 → 因路由门控位置错误,MFA 从未被强制执行。
  • hunt-misc:经 /api/me 泄露恢复码属于杂项类信息泄露,链式后变为 Critical。链式原语:/api/me 返回完整用户对象,包含 backup_codes 数组(明文、从不轮换)→ 拥有任意读取型 IDOR 或 XSS 的攻击者窃取备用码 → 使用一个备用码 → 满足 MFA → 在不知 OTP 的情况下实现 ATO。
  • security-arsenal:当 "MFA satisfied" 声明存在于可伪造的 JWT 声明中时,取用 OTP 暴力破解载荷部分(000000-999999 字典生成器、带 -t 5 -p 0.5-2 的 ffuf 速率限制规避模式、经 proxychains 的分布式 IP 轮换)以及 JWT 令牌重放表。
  • triage-validation:在仅当攻击者已持有密码时才生效的 MFA 绕过上声称 Critical 之前,先运行 Pre-Severity Gate。独立的 MFA 绕过为 High;与密码预言机链式为 Critical;仅与 cookie 窃取链式也为 Critical。链式问题是区分二者的关键。

适用场景与限制

适用于授权范围内的安全测试与漏洞赏金场景,用于验证目标应用的 MFA 实现是否存在上述 7 类缺陷。使用时应控制请求速率以避免触发封禁,并注意仅在合法授权下进行测试。资料未提供该技能的安装方式、收费信息或具体平台支持范围。