任意用户登录漏洞挖掘思路
字数 1674 2025-08-10 08:28:45

任意用户登录漏洞挖掘思路详解

前言

任意用户登录漏洞因其利用难度低、危害高、奖金高等特点,已成为SRC/众测漏洞挖掘中的重点目标。本文将系统性地介绍各类任意用户登录漏洞的挖掘思路。

1. 手机验证码问题导致的任意用户登录

1.1 验证码爆破

  • 适用场景:使用手机验证码登录,且存在以下情况之一:

    • 无图片验证码
    • 图片验证码可重用
    • 图片验证码简单可识别(可使用captcha-killer-modified插件)
    • 后端未限制验证码验证错误次数
  • 爆破方法

    • 4位验证码:常规爆破
    • 6位验证码:使用BurpSuite的Turbo Intruder插件,示例脚本:
      import re
      def queueRequests(target, wordlists):
          engine = RequestEngine(endpoint=target.endpoint,
                              concurrentConnections=30,
                              requestsPerConnection=30,
                              pipeline=True)
          for i in range(1000000):  # 生成六位验证码字典
              number = "{:06d}".format(i)
              engine.queue(target.req, number.rstrip())
      

1.2 验证码明文返回

  • 特征:获取手机验证码时,验证码直接在返回包中明文显示

1.3 存在万能验证码

  • 常见测试用万能码:000000、123456等
  • 成因:测试环境遗留未删除

1.4 验证码未绑定用户

  • 类型A:仅验证验证码正确性,未验证与手机号的对应关系

    • 攻击方法:
      1. 获取自己手机号A的验证码
      2. 获取他人手机号B的验证码
      3. 使用A的验证码登录B的账号
  • 类型B:仅验证手机号与验证码一致性,未验证手机号归属

    • 常见于用户绑定功能处
    • 攻击方法:
      1. 在绑定功能处输入目标商户号+任意手机号
      2. 通过注册功能获取自己手机号的验证码
      3. 修改绑定请求中的手机号和验证码为自己的

1.5 获取验证码的手机号字段可双写

  • 攻击方法
    1. 输入自己手机号抓包
    2. 双写手机号字段:
    • 添加逗号/分号分隔:phone=13333333333,18888888888
    • 直接双写字段:phone=13333333333&phone=18888888888
    1. 两手机号收到相同验证码时漏洞存在

1.6 验证码为空/任意验证码可成功验证

  • 特征:验证码为空或任意值时,只要手机号正确即可登录

2. 凭证安全问题导致的任意用户登录

2.1 凭证泄露

2.1.1 页面缓存被搜索引擎抓取

  • 检测方法:搜索引擎搜索域名,查看是否有登录后页面被抓取

2.1.2 httptrace/druid等组件中的凭证泄露

  • httptrace

    • Spring端点记录用户会话信息
    • 未授权访问时可获取凭证
  • druid

    • session监控功能泄露有效会话
    • 可将未授权访问漏洞提升至高危

2.1.3 sessionkey泄露

  • 微信小程序场景
    1. 获取sessionkey和iv
    2. 伪造任意手机号的加密数据
    3. 使用伪造数据登录

2.1.4 其他接口中的信息泄露

  • 常见位置:JS或api-docs中的特殊接口(如getToken等)

2.2 凭证可伪造

2.2.1 JWT问题

  • 未验参

    1. 删除签名部分
    2. 或修改alg为none后删除签名
    3. 修改用户信息字段
  • 弱密钥

    1. 爆破密钥
    2. 修改用户信息字段
    3. 用密钥重新生成签名

2.2.2 弱cookie

  • 特征:cookie字段可预测或伪造

2.3 凭证过早返回

  • 常见场景:登录前查询用户信息时过早返回sessionid
  • 金融项目案例
    1. 输入手机号查询是否注册
    2. 信息查询阶段返回sessionid
    3. 导致任意用户登录

3. 逻辑漏洞导致的任意用户登录

3.1 登录完全依赖数据包中的参数且参数可控

  • 常见于:两步/多步登录流程
  • 攻击方法
    • 修改第一个请求的返回包
      1. 拦截返回包
      2. 修改关键字段(如手机号)
    • 修改第二个请求的请求包
      1. 直接修改请求中的用户标识字段

3.2 更改登录type

  • 特征:存在免密登录/快捷登录功能
  • 攻击方法:修改请求中的type字段

3.3 账号数据覆盖

  • 常见于:修改手机号、账户绑定等功能
  • 攻击方法
    1. 在修改功能处输入新手机号和验证码
    2. 修改请求中的oldmobile为他人手机号
    3. 将他人账户数据覆盖到新手机号

总结

任意用户登录漏洞形式多样,主要可归纳为验证码问题、凭证安全和逻辑漏洞三大类。挖掘时应重点关注:

  1. 验证码相关功能的各个环节
  2. 凭证的生成、存储和验证机制
  3. 登录流程中的逻辑缺陷
  4. 系统各功能间的数据交互关系

通过系统性地测试这些关键点,可以有效发现任意用户登录漏洞。

任意用户登录漏洞挖掘思路详解 前言 任意用户登录漏洞因其利用难度低、危害高、奖金高等特点,已成为SRC/众测漏洞挖掘中的重点目标。本文将系统性地介绍各类任意用户登录漏洞的挖掘思路。 1. 手机验证码问题导致的任意用户登录 1.1 验证码爆破 适用场景 :使用手机验证码登录,且存在以下情况之一: 无图片验证码 图片验证码可重用 图片验证码简单可识别(可使用captcha-killer-modified插件) 后端未限制验证码验证错误次数 爆破方法 : 4位验证码:常规爆破 6位验证码:使用BurpSuite的Turbo Intruder插件,示例脚本: 1.2 验证码明文返回 特征 :获取手机验证码时,验证码直接在返回包中明文显示 1.3 存在万能验证码 常见测试用万能码 :000000、123456等 成因 :测试环境遗留未删除 1.4 验证码未绑定用户 类型A :仅验证验证码正确性,未验证与手机号的对应关系 攻击方法: 获取自己手机号A的验证码 获取他人手机号B的验证码 使用A的验证码登录B的账号 类型B :仅验证手机号与验证码一致性,未验证手机号归属 常见于用户绑定功能处 攻击方法: 在绑定功能处输入目标商户号+任意手机号 通过注册功能获取自己手机号的验证码 修改绑定请求中的手机号和验证码为自己的 1.5 获取验证码的手机号字段可双写 攻击方法 : 输入自己手机号抓包 双写手机号字段: 添加逗号/分号分隔: phone=13333333333,18888888888 直接双写字段: phone=13333333333&phone=18888888888 两手机号收到相同验证码时漏洞存在 1.6 验证码为空/任意验证码可成功验证 特征 :验证码为空或任意值时,只要手机号正确即可登录 2. 凭证安全问题导致的任意用户登录 2.1 凭证泄露 2.1.1 页面缓存被搜索引擎抓取 检测方法 :搜索引擎搜索域名,查看是否有登录后页面被抓取 2.1.2 httptrace/druid等组件中的凭证泄露 httptrace : Spring端点记录用户会话信息 未授权访问时可获取凭证 druid : session监控功能泄露有效会话 可将未授权访问漏洞提升至高危 2.1.3 sessionkey泄露 微信小程序场景 : 获取sessionkey和iv 伪造任意手机号的加密数据 使用伪造数据登录 2.1.4 其他接口中的信息泄露 常见位置 :JS或api-docs中的特殊接口(如getToken等) 2.2 凭证可伪造 2.2.1 JWT问题 未验参 : 删除签名部分 或修改alg为none后删除签名 修改用户信息字段 弱密钥 : 爆破密钥 修改用户信息字段 用密钥重新生成签名 2.2.2 弱cookie 特征 :cookie字段可预测或伪造 2.3 凭证过早返回 常见场景 :登录前查询用户信息时过早返回sessionid 金融项目案例 : 输入手机号查询是否注册 信息查询阶段返回sessionid 导致任意用户登录 3. 逻辑漏洞导致的任意用户登录 3.1 登录完全依赖数据包中的参数且参数可控 常见于 :两步/多步登录流程 攻击方法 : 修改第一个请求的返回包 : 拦截返回包 修改关键字段(如手机号) 修改第二个请求的请求包 : 直接修改请求中的用户标识字段 3.2 更改登录type 特征 :存在免密登录/快捷登录功能 攻击方法 :修改请求中的type字段 3.3 账号数据覆盖 常见于 :修改手机号、账户绑定等功能 攻击方法 : 在修改功能处输入新手机号和验证码 修改请求中的oldmobile为他人手机号 将他人账户数据覆盖到新手机号 总结 任意用户登录漏洞形式多样,主要可归纳为验证码问题、凭证安全和逻辑漏洞三大类。挖掘时应重点关注: 验证码相关功能的各个环节 凭证的生成、存储和验证机制 登录流程中的逻辑缺陷 系统各功能间的数据交互关系 通过系统性地测试这些关键点,可以有效发现任意用户登录漏洞。