任意用户密码重置(四):重置凭证未校验
字数 1210 2025-08-18 11:37:07
任意用户密码重置漏洞分析:重置凭证未校验
漏洞概述
任意用户密码重置漏洞是逻辑漏洞中最常见的一种,主要出现在密码找回功能中。本文重点分析"重置凭证未校验"这一类型的漏洞,即服务端未对用户提交的密码重置凭证(如验证码、密保答案)进行有效性校验,导致攻击者可以绕过正常验证流程重置任意用户密码。
漏洞原理
密码找回功能通常需要验证用户身份,常见方式有:
- 发送重置验证码到用户绑定的邮箱或手机
- 要求用户回答预设的密保问题
当服务端未对用户提交的重置凭证进行校验时,无论凭证是否正确,只要请求格式合法,系统都会允许密码重置操作。
漏洞案例与分析
案例一:未校验重置token
漏洞发现过程:
- 攻击者使用自己的账号(
yangyangwithgnu@yeah.net)发起密码找回请求 - 收到包含token的重置链接:
http://www.omegatravel.net/users/retrievePasswordReset/key:FqvICT/userEmail:yangyangwithgnu@yeah.net - 修改key值为任意值(如
xxxxxx)后访问链接,仍能进入密码重置页面 - 构造其他用户的密码重置链接:
http://www.omegatravel.net/users/retrievePasswordReset/key:xxxxxx/userEmail:travel24@omegatravel.net - 成功重置目标用户密码并登录
漏洞本质:服务端未验证token与邮箱的匹配关系,仅检查请求格式
攻击扩展:
- 通过网站域名信息推测内部邮箱格式(如
@omegauk.net) - 组合常见姓名与邮箱后缀生成用户字典
- 从"联系我们"等页面收集内部邮箱
案例二:可枚举无密保用户
漏洞发现过程:
- 在密码找回页面输入用户名并拦截请求
- 分析服务器响应:
- 用户名存在且有密保:返回密保问题
- 用户名存在但无密保:返回
<td width="65%"></td> - 用户名不存在:返回错误提示
- 枚举常见用户名,筛选无密保的用户
- 对无密保用户,输入任意密保答案均可重置密码
漏洞本质:服务端允许无密保用户通过密保方式找回密码,且不验证答案的正确性
防御措施
-
严格校验重置凭证:
- 必须验证token与用户身份的匹配关系
- 必须验证密保答案的正确性
-
处理无密保账户:
- 禁止无密保用户通过密保方式找回密码
- 提供替代的身份验证方式
-
防止枚举攻击:
- 添加图片验证码
- 限制单位时间内的请求频率
- 对枚举行为进行检测和阻断
-
安全开发实践:
- 所有验证逻辑必须在服务端实现
- 敏感操作需多重验证
- 定期进行安全审计
总结
重置凭证未校验漏洞技术门槛低但危害大,攻击者可借此完全控制用户账户。开发人员必须对所有验证环节进行严格校验,不能仅依赖请求格式的正确性。安全团队应定期对密码找回功能进行专项测试,确保所有验证逻辑得到正确实施。