任意用户登录漏洞挖掘思路
字数 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:仅验证验证码正确性,未验证与手机号的对应关系
- 攻击方法:
- 获取自己手机号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为他人手机号
- 将他人账户数据覆盖到新手机号
总结
任意用户登录漏洞形式多样,主要可归纳为验证码问题、凭证安全和逻辑漏洞三大类。挖掘时应重点关注:
- 验证码相关功能的各个环节
- 凭证的生成、存储和验证机制
- 登录流程中的逻辑缺陷
- 系统各功能间的数据交互关系
通过系统性地测试这些关键点,可以有效发现任意用户登录漏洞。