挖洞经验 | 密码重置Token可预测性导致的账号劫持漏洞
字数 1147 2025-08-15 21:30:23
密码重置Token可预测性导致的账号劫持漏洞分析
漏洞概述
本漏洞存在于目标网站(program.com)的密码重置功能中,由于密码重置Token的生成算法存在可预测性和可枚举性,导致攻击者可以预测或暴力破解其他用户的密码重置Token,从而劫持任意用户账号。
漏洞发现过程
初始观察
-
测试忘记密码功能时发现一个异常现象:每次对同一账号发起密码重置请求后,收到的Token前3个字符总是相同的
-
示例重置链接格式:
https://program.com/forgot_password/<TOKEN-HERE>
Token结构分析
-
前3个字符规律:
- 来源于用户注册邮箱前缀
- 具体算法:从邮箱前缀的第4个字符开始,向前反向取第2-4个字符
- 示例:
- 邮箱:
johndoe@domain.com - 前3个Token字符:
nho(取自j o h n d o e中的第4字符n向前反向取3个:n、h、o)
- 邮箱:
-
中间部分:
- 包含当前时间戳信息
- 但时间戳前后还有2个无法直接确定规律的字符
-
剩余部分:
- 可能是随机生成的2个字符
漏洞利用方法
攻击前提条件
- 知道目标用户的注册邮箱地址
- 攻击者拥有一个前缀与目标用户相同的邮箱地址
攻击步骤
-
准备阶段:
- 注册一个与目标用户邮箱前缀相同的攻击者邮箱
- 示例:
- 受害者邮箱:
johndoe@domain.com - 攻击者邮箱:
johndoe@domain2.com
- 受害者邮箱:
- 示例:
- 注册一个与目标用户邮箱前缀相同的攻击者邮箱
-
发起重置请求:
- 同时向目标服务端对两个邮箱发起密码重置请求
- 由于邮箱前缀相同,生成的Token中除随机部分外应该相同
-
获取攻击者Token:
- 登录攻击者邮箱,获取包含Token信息的密码重置链接
-
构造攻击载荷:
- 使用Burp Intruder等工具构造字典文件
- 重点枚举那2个随机字符部分
-
实施暴力破解:
- 由于服务端无速率限制,可以快速枚举可能的组合
- 当收到302跳转响应时,表示找到了有效的密码重置Token
漏洞危害
- 攻击者可重置任意用户的密码
- 完全控制目标用户账号
- 可能导致敏感信息泄露、权限提升等严重后果
漏洞修复建议
-
Token生成算法:
- 使用加密安全的随机数生成器生成完整Token
- 避免使用用户相关信息作为Token组成部分
-
速率限制:
- 实施请求频率限制
- 例如:同一IP/账号在短时间内只能发起有限次数的重置请求
-
Token时效性:
- 设置较短的有效期(如15-30分钟)
- 使用后立即失效
-
日志监控:
- 记录所有密码重置请求
- 监控异常的重置尝试模式
漏洞评级
该漏洞被厂商评定为P1(最高)严重级别漏洞,应立即修复。
防御措施总结
- 使用加密安全的随机Token
- 实施严格的速率限制
- 设置合理的Token有效期
- 避免Token中包含可预测的用户信息
- 加强异常行为监控
通过以上措施,可以有效防止此类密码重置Token可预测性导致的账号劫持漏洞。