白帽故事 · 2025年5月27日 0

利用未授权的密码重置实现完全帐户接管

前期侦察

在分析 Target.com 时,通过 Burp Suite 中监控 HTTP 请求,发现一处 有趣的 API 端点:

GET /accounts/manage-users-data HTTP/2

在响应包中,包含了以下参数:

"showResetPassword": false,
"showModifyEmails": false

这些值表示用户角色禁用了密码重置和电子邮件修改选项。

file

漏洞利用

在 Burp 中使用匹配和替换 ,将响应包修改为:

"showResetPassword": true,
"showModifyEmails": true

刷新页面会发现可以访问两个新选项:

file

测试密码重置

当启用这些选项后,白帽小哥决定测试是否可以为团队中的用户重置密码 。

首先选择一个团队成员的帐户 ,然后单击 Reset Password(重置密码 ),系统响应 200 OK, 并提供了有效的密码重置链接 :

file

复制该链接,浏览器中打开后成功设置了新密码,并成功登录了该成员的帐户 。

这证实了我们可以为团队内部的用户重置密码 ——那么该漏洞是否适用于团队外部的用户呢?

任意用户密码重置

当单击 Reset Password(重置密码) 时,拦截请求:

{
  "userId": 9438867,
  "resetAccessKey": false
}

请求中包括用户的数字 ID,这立刻引起了白帽小哥的注意。

file

为了确认用户 ID 是连续的 ,白帽小哥创建了一个新账户并检查了其用户 ID。

新账户的 ID为 9438868,这意味着系统使用了增量用户 ID。

修改该请求,将 userId 替换为另一个非团队用户 ID:

{
  "userId": 9438868,
  "resetAccessKey": false
}

服务器响应 200 OK, 同时收到了有效的密码重置链接 !成功成功登录受害者的帐户!

白帽小哥立即报告了该漏洞,最终漏洞被定级为严重,白帽小哥也顺利获得了丰厚的漏洞赏金。

file

你学到了么?