记一次SRC高危逻辑漏洞挖掘
字数 1214 2025-09-01 11:26:02
SRC高危逻辑漏洞挖掘实战教学文档
漏洞概述
本次挖掘的是一个高危逻辑漏洞,涉及验证码绕过和任意用户注册/登录问题。通过置空关键验证字段,攻击者可以实现:
- 任意手机号注册
- 任意用户登录接管
- 身份认证绕过
漏洞发现过程
1. 业务接口分析
- 目标站点存在注册/登录一体化接口:
/xjky-server/xjky-biz-server/app/open/sms/registerAndLogin - 注册和登录使用同一接口,未注册账户会自动注册
- 关键请求参数:
- 手机号
- 短信验证码
- tenantId(租户ID)
2. 正常流程分析
正常注册流程:
- 用户输入手机号和正确验证码
- 系统验证后返回Token
- 后续请求携带Token进行身份认证
3. 漏洞验证步骤
任意注册漏洞
- 使用Burp Suite拦截注册请求
- 将验证码字段置空
- 发现即使验证码为空,系统仍返回有效Token
- 通过个人信息接口验证,确认新Token对应的是任意指定的手机号
任意登录漏洞
- 已有账户(如138号码)正常登录
- 攻击者在不知道验证码的情况下:
- 输入任意验证码
- 拦截响应包
- 替换为之前生成的任意Token
- 系统接受伪造Token,成功登录目标账户
漏洞原理
- 验证码校验缺失:后端未对验证码进行有效校验,允许空值或任意值通过
- Token生成逻辑缺陷:Token生成仅依赖手机号,不验证验证码正确性
- 认证与授权分离:认证成功后,授权环节未二次验证用户身份真实性
漏洞利用
攻击场景
- 账户接管:攻击者可通过此漏洞登录任意用户账户
- 批量注册:自动化脚本可大量注册虚假账户
- 数据泄露:通过个人信息接口获取系统所有用户数据
利用步骤
- 获取已存在用户的手机号
- 调用注册/登录接口,置空验证码
- 获取返回的Token
- 使用Token访问系统功能
修复建议
-
强制验证码校验:
- 后端必须验证验证码的有效性
- 拒绝空验证码请求
-
Token生成增强:
- Token生成应结合验证码校验结果
- 加入时间戳防止重放
-
接口分离:
- 将注册和登录接口分离
- 注册需额外验证机制(如人工审核)
-
日志监控:
- 记录所有验证码验证失败尝试
- 设置异常请求阈值告警
-
二次验证:
- 敏感操作需二次验证
- 如短信/邮箱确认
漏洞挖掘技巧
- 置空测试:对关键字段(验证码、Token、ID等)尝试置空
- 接口关联分析:识别功能相似的接口(如本例的注册/登录一体化接口)
- 业务逻辑逆向:理解正常流程,寻找逻辑断点
- Token重用测试:验证Token是否可跨用户/跨场景使用
总结
本案例展示了逻辑漏洞的典型特征:
- 看似简单的验证绕过(置空验证码)
- 造成严重后果(完全接管账户)
- 涉及多个环节(注册、登录、认证)
挖掘此类漏洞需要:
- 对业务逻辑的深入理解
- 系统性的测试方法
- 对验证机制的特别关注
通过本案例,安全研究人员应加强对业务逻辑漏洞的重视,开发者也应建立多层防御机制,避免单点验证失效导致系统沦陷。