任意用户密码重置(七):Token可预测
字数 1627 2025-08-18 11:37:23
任意用户密码重置漏洞分析:Token可预测攻击
漏洞概述
任意用户密码重置漏洞是逻辑漏洞中最常见的类型之一,特别是在密码找回功能中。本文重点分析因重置凭证(Token)可预测导致的任意用户密码重置问题。
漏洞成因
开发人员常使用以下三类信息之一作为因子生成Token:
- 时间戳:基于当前Unix时间戳
- 递增序号:基于某种递增序列
- 关键字段:基于用户邮箱、手机号等关键信息
攻击者通过收集关键字段,使用常见加密算法计算,判断是否可以预测出Token。
攻击案例与分析
案例一:基于时间戳生成的Token
目标系统:http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a4100e07dac/
攻击步骤:
- 尝试重置admin密码,无重置URL显示
- 重置其他账号(yangyangwithgnu),获得重置URL格式:
http://lab1.../reset.php?sukey=8135f8b07653b2cbc3ec05c781a29591&username=yangyangwithgnu - 分析sukey参数:
- MD5解密得到1530342360
- 确认是Unix时间戳
攻击模型:
- 第一次找回yangyangwithgnu密码,获取时间戳T1
- 第二次找回admin密码(服务端已生成Token但不可见)
- 第三次找回yangyangwithgnu密码,获取时间戳T2
- admin的Token生成时间在[T1,T2]区间内
实施爆破:
- 构造URL:
http://.../reset.php?sukey={md5(unix_timestamp)}&username=admin - 使用Intruder工具爆破[T1,T2]区间的时间戳
- 成功获取admin的重置URL
案例二:基于递增序号生成的Token
目标系统:金蝶云之家密码找回
重置URL格式:
.../resetPasswordByEmail.do?u=username&t=52df773f24ac5b651d288d42
分析过程:
- 连续获取5个重置链接,提取t参数:
52df773f24ac5b651d288d42 52df774124ac5b651d288d44 52df774324ac5b651d288d46 52df774524ac5b651d288d48 52df774724ac5b651d288d4a - 发现变化规律:
- 第5-8位:按2的增量递增(773f→7741→7743...)
- 最后4位:按2的增量递增(8d42→8d44→8d46...)
攻击方法:
- 触发找回攻击者账号密码,获取初始t值
- 触发找回目标账号密码(t未知)
- 再次触发找回攻击者账号密码,获取新t值
- 根据变化规律枚举目标账号的t值
案例三:基于关键字段生成的Token
案例3.1:
重置URL:.../reset.php?key=3dac8f0a0660ef49a49d3d1a1a8dcf11
分析过程:
- 请求参数:username(邮箱)、rvcode(图片验证码)、sid(未知)
- 尝试排列组合MD5:
md5(username + sid)= 邮件中的凭证
案例3.2:
重置URL:.../sms.php?k=a18f057d5aF
分析过程:
- 发现凭证末尾"F"恒定
- 前10位疑似MD5:
md5(手机号+图片验证码)= 邮件中的凭证
防御措施
-
Token随机化:
- 使用强随机数生成器生成Token
- 避免使用可预测因子(时间戳、序列号、用户信息)
-
加密增强:
- 若使用加密算法,加入不可预测的盐值
- 使用HMAC等带密钥的哈希算法
-
请求限制:
- 限制单位时间内的密码重置请求次数
- 实施CAPTCHA验证
-
Token时效:
- 设置短有效期(如15分钟)
- 单次使用后立即失效
-
安全审计:
- 定期检查Token生成逻辑
- 进行渗透测试验证安全性
总结
Token可预测导致的任意用户密码重置漏洞危害严重,攻击者可通过分析Token生成规律,预测或爆破出有效Token。开发时应确保Token的不可预测性和随机性,并实施适当的防护措施。