任意用户密码重置(七):Token可预测
字数 1627 2025-08-18 11:37:23

任意用户密码重置漏洞分析:Token可预测攻击

漏洞概述

任意用户密码重置漏洞是逻辑漏洞中最常见的类型之一,特别是在密码找回功能中。本文重点分析因重置凭证(Token)可预测导致的任意用户密码重置问题。

漏洞成因

开发人员常使用以下三类信息之一作为因子生成Token:

  1. 时间戳:基于当前Unix时间戳
  2. 递增序号:基于某种递增序列
  3. 关键字段:基于用户邮箱、手机号等关键信息

攻击者通过收集关键字段,使用常见加密算法计算,判断是否可以预测出Token。

攻击案例与分析

案例一:基于时间戳生成的Token

目标系统:http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a4100e07dac/

攻击步骤

  1. 尝试重置admin密码,无重置URL显示
  2. 重置其他账号(yangyangwithgnu),获得重置URL格式:
    http://lab1.../reset.php?sukey=8135f8b07653b2cbc3ec05c781a29591&username=yangyangwithgnu
  3. 分析sukey参数:
    • MD5解密得到1530342360
    • 确认是Unix时间戳

攻击模型

  1. 第一次找回yangyangwithgnu密码,获取时间戳T1
  2. 第二次找回admin密码(服务端已生成Token但不可见)
  3. 第三次找回yangyangwithgnu密码,获取时间戳T2
  4. 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

分析过程

  1. 连续获取5个重置链接,提取t参数:
    52df773f24ac5b651d288d42
    52df774124ac5b651d288d44
    52df774324ac5b651d288d46
    52df774524ac5b651d288d48
    52df774724ac5b651d288d4a
    
  2. 发现变化规律:
    • 第5-8位:按2的增量递增(773f→7741→7743...)
    • 最后4位:按2的增量递增(8d42→8d44→8d46...)

攻击方法

  1. 触发找回攻击者账号密码,获取初始t值
  2. 触发找回目标账号密码(t未知)
  3. 再次触发找回攻击者账号密码,获取新t值
  4. 根据变化规律枚举目标账号的t值

案例三:基于关键字段生成的Token

案例3.1
重置URL.../reset.php?key=3dac8f0a0660ef49a49d3d1a1a8dcf11

分析过程

  1. 请求参数:username(邮箱)、rvcode(图片验证码)、sid(未知)
  2. 尝试排列组合MD5:
    • md5(username + sid) = 邮件中的凭证

案例3.2
重置URL.../sms.php?k=a18f057d5aF

分析过程

  1. 发现凭证末尾"F"恒定
  2. 前10位疑似MD5:
    • md5(手机号+图片验证码) = 邮件中的凭证

防御措施

  1. Token随机化

    • 使用强随机数生成器生成Token
    • 避免使用可预测因子(时间戳、序列号、用户信息)
  2. 加密增强

    • 若使用加密算法,加入不可预测的盐值
    • 使用HMAC等带密钥的哈希算法
  3. 请求限制

    • 限制单位时间内的密码重置请求次数
    • 实施CAPTCHA验证
  4. Token时效

    • 设置短有效期(如15分钟)
    • 单次使用后立即失效
  5. 安全审计

    • 定期检查Token生成逻辑
    • 进行渗透测试验证安全性

总结

Token可预测导致的任意用户密码重置漏洞危害严重,攻击者可通过分析Token生成规律,预测或爆破出有效Token。开发时应确保Token的不可预测性和随机性,并实施适当的防护措施。

任意用户密码重置漏洞分析: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参数: 发现变化规律: 第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的不可预测性和随机性,并实施适当的防护措施。