密码重置的那些事
字数 1568 2025-08-20 18:17:41
密码重置漏洞实战指南
1. 密码重置漏洞概述
密码重置功能是现代Web应用中常见的安全薄弱环节,攻击者可以利用多种技术手段绕过正常验证流程,实现任意用户密码重置。本文总结了实战中常见的密码重置漏洞类型及利用方法。
2. 漏洞类型及利用方法
2.1 重置凭证泄露
漏洞描述:短信验证码、重置链接等敏感信息在HTTP响应中直接暴露。
案例:
- 短信验证码在HTTP响应包中明文返回
- 邮箱重置链接在响应中完整显示
利用方法:
- 使用Burp Suite拦截密码重置请求
- 检查响应包中是否包含验证码或完整重置链接
- 直接使用泄露的凭证完成密码重置
2.2 重置接收端可控
漏洞描述:服务端从客户端获取手机号/邮箱等接收端信息,未进行严格验证。
案例:
- 输入用户名后,服务端返回关联手机号到前端
- 获取验证码时,服务端从前端获取手机号码
利用方法:
- 修改请求参数中的接收端信息(手机号/邮箱)
- 将接收端改为攻击者控制的设备/邮箱
- 接收重置凭证完成密码修改
2.3 重置元素弱关联
2.3.1 Cookie混淆
漏洞描述:未登录状态下cookie值不变,可关联多个账号。
利用方法:
- 使用攻击者账号发起密码重置流程
- 在提交修改密码时截断请求
- 用目标账号发起新流程,保持相同cookie
- 重放之前的修改密码请求
2.3.2 Username/SID混淆
漏洞描述:修改密码请求中包含用户名参数,可被篡改。
利用方法:
- 拦截类似
username=张三&new_pwd=123456的请求 - 修改username参数为目标账户
- 提交请求实现越权修改
2.3.3 接收端弱关联
案例:
- 系统要求账号名、身份证号、手机号同时正确
- 实际只需前两项正确即可绕过
2.3.4 步骤跳过
漏洞描述:多步骤重置流程可通过修改状态码跳过验证。
利用方法:
- 分析前端JS文件,获取成功状态码
- 拦截中间步骤响应,修改为成功状态码
- 直接跳转到最终密码修改页面
2.4 重置凭证未校验
漏洞描述:最终修改密码请求中的验证参数(token)可被删除或绕过。
利用方法:
- 拦截包含token的修改密码请求
- 尝试删除token或相关验证参数
- 提交请求测试是否仍能修改密码
2.5 重置凭证可爆破/预测
2.5.1 验证码爆破
适用条件:
- 验证码为短数字(如4位)
- 有效期足够长
- 无限或高尝试次数
利用方法:
- 使用Burp Intruder设置数字范围
- 自动尝试所有可能的验证码组合
2.5.2 Token预测
漏洞描述:Token生成有规律可循,可被预测。
利用方法:
- 收集多个合法token样本
- 分析生成算法和规律
- 伪造有效token
3. 特殊案例分享
案例1:双重响应泄露
- 正确输入用户名和身份证号后
- 服务端同时返回验证码正确和错误的页面
- 可直接从响应中获取有效验证码
案例2:未授权方法利用
- 通过JS发现的未授权API
- 可修改任意用户的预留手机号
- 进而控制密码重置接收端
案例3:信息泄露导致重置
- 系统泄露敏感信息(如身份证号)
- 结合其他漏洞实现密码重置
4. 防御建议
- 凭证保护:确保验证码、重置链接等敏感信息不在响应中泄露
- 接收端验证:服务端应独立获取接收端信息,不从客户端获取
- 严格关联:确保各步骤参数严格绑定,无法被混淆或跳过
- 凭证校验:所有关键操作必须验证token等安全凭证
- 防爆破措施:限制验证码尝试次数,使用复杂token
- 权限控制:确保无未授权API可修改用户敏感信息
5. 总结
密码重置功能的安全隐患多种多样,从简单的信息泄露到复杂的逻辑漏洞都可能被利用。安全测试时应全面检查各个环节,特别关注客户端可控参数、步骤跳转可能性以及凭证验证强度。开发者也应按照最小权限原则设计密码重置流程,避免给攻击者可乘之机。