任意用户密码重置(三):用户混淆
字数 1107 2025-08-18 11:37:02

任意用户密码重置漏洞分析:用户混淆案例详解

漏洞概述

任意用户密码重置漏洞是逻辑漏洞中最常见的一类,主要出现在密码找回功能中。本文重点分析因用户混淆导致的任意用户密码重置问题,包含三个典型案例及防御措施。

漏洞核心要素

密码找回逻辑包含四个关键要素,若未完整关联则可能导致漏洞:

  1. 用户标识:用户名、用户ID、cookie等
  2. 接收端:手机、邮箱等验证凭证接收方式
  3. 凭证:验证码、token等验证手段
  4. 当前步骤:流程中的步骤状态

案例一:Cookie混淆攻击

漏洞描述

通过篡改会话cookie,将攻击者账号的密码重置流程应用于其他用户账号。

攻击步骤

  1. 使用攻击者账号(yangyangwithgnu)发起密码找回流程
  2. 完成邮箱验证码校验,进入新密码设置页面
  3. 拦截提交请求(包含PHPSESSID=dcusc1ahkn4ioqeeav9c6e0bdq)
  4. 不发送该请求,新开页面为普通账号(liuwei)发起密码找回
  5. 此时PHPSESSID已关联到liuwei账号
  6. 发送之前拦截的请求,成功重置liuwei密码

漏洞原因

服务端仅依赖PHPSESSID判断目标账号,未校验账号与流程的一致性。

案例二:请求参数篡改攻击

漏洞描述

通过直接修改请求中的用户名参数实现任意用户密码重置。

攻击步骤

  1. 攻击者完成自身账号的密码找回流程
  2. 拦截第三步请求(含accountname参数)
  3. 将accountname改为目标账号(zhangzhiqiang)
  4. 放行请求,成功重置目标账号密码

额外发现

  1. 短信验证码(vcode)参数可置空或删除,服务端不校验
  2. 结合其他问题可实现批量密码重置

案例三:Token中的用户ID篡改

漏洞描述

通过修改重置链接中的base64编码用户ID实现攻击。

攻击步骤

  1. 获取攻击者账号的重置链接,含NDI1NTg=(42558的base64)
  2. 解码发现42558是攻击者用户ID
  3. 替换为目标账号的用户ID的base64编码
  4. 访问修改后的链接,成功重置目标账号密码

关键点

REST风格URL中的参数需特别注意,/后的部分可能是参数值。

防御措施

  1. 一致性验证:服务端应验证重置用户与接收凭证的一致性
  2. 服务端生成:关键参数应由服务端生成,不从客户端获取
  3. 四要素关联:用户标识、接收端、凭证、当前步骤必须完整关联
  4. 参数校验:严格检查HTTP参数污染、缺失等问题
  5. 会话绑定:密码找回流程应与初始请求会话严格绑定

总结

任意用户密码重置漏洞的核心在于用户标识与其他要素的关联缺失。攻击者通过cookie混淆、参数篡改等方式利用这种缺失,防御关键在于服务端对所有关键要素的严格验证和关联。

任意用户密码重置漏洞分析:用户混淆案例详解 漏洞概述 任意用户密码重置漏洞是逻辑漏洞中最常见的一类,主要出现在密码找回功能中。本文重点分析因 用户混淆 导致的任意用户密码重置问题,包含三个典型案例及防御措施。 漏洞核心要素 密码找回逻辑包含四个关键要素,若未完整关联则可能导致漏洞: 用户标识 :用户名、用户ID、cookie等 接收端 :手机、邮箱等验证凭证接收方式 凭证 :验证码、token等验证手段 当前步骤 :流程中的步骤状态 案例一:Cookie混淆攻击 漏洞描述 通过篡改会话cookie,将攻击者账号的密码重置流程应用于其他用户账号。 攻击步骤 使用攻击者账号(yangyangwithgnu)发起密码找回流程 完成邮箱验证码校验,进入新密码设置页面 拦截提交请求(包含PHPSESSID=dcusc1ahkn4ioqeeav9c6e0bdq) 不发送该请求,新开页面为普通账号(liuwei)发起密码找回 此时PHPSESSID已关联到liuwei账号 发送之前拦截的请求,成功重置liuwei密码 漏洞原因 服务端仅依赖PHPSESSID判断目标账号,未校验账号与流程的一致性。 案例二:请求参数篡改攻击 漏洞描述 通过直接修改请求中的用户名参数实现任意用户密码重置。 攻击步骤 攻击者完成自身账号的密码找回流程 拦截第三步请求(含accountname参数) 将accountname改为目标账号(zhangzhiqiang) 放行请求,成功重置目标账号密码 额外发现 短信验证码(vcode)参数可置空或删除,服务端不校验 结合其他问题可实现批量密码重置 案例三:Token中的用户ID篡改 漏洞描述 通过修改重置链接中的base64编码用户ID实现攻击。 攻击步骤 获取攻击者账号的重置链接,含NDI1NTg=(42558的base64) 解码发现42558是攻击者用户ID 替换为目标账号的用户ID的base64编码 访问修改后的链接,成功重置目标账号密码 关键点 REST风格URL中的参数需特别注意,/后的部分可能是参数值。 防御措施 一致性验证 :服务端应验证重置用户与接收凭证的一致性 服务端生成 :关键参数应由服务端生成,不从客户端获取 四要素关联 :用户标识、接收端、凭证、当前步骤必须完整关联 参数校验 :严格检查HTTP参数污染、缺失等问题 会话绑定 :密码找回流程应与初始请求会话严格绑定 总结 任意用户密码重置漏洞的核心在于 用户标识与其他要素的关联缺失 。攻击者通过cookie混淆、参数篡改等方式利用这种缺失,防御关键在于服务端对所有关键要素的严格验证和关联。