记一次SRC高危逻辑漏洞挖掘
字数 1214 2025-09-01 11:26:02

SRC高危逻辑漏洞挖掘实战教学文档

漏洞概述

本次挖掘的是一个高危逻辑漏洞,涉及验证码绕过和任意用户注册/登录问题。通过置空关键验证字段,攻击者可以实现:

  1. 任意手机号注册
  2. 任意用户登录接管
  3. 身份认证绕过

漏洞发现过程

1. 业务接口分析

  • 目标站点存在注册/登录一体化接口:/xjky-server/xjky-biz-server/app/open/sms/registerAndLogin
  • 注册和登录使用同一接口,未注册账户会自动注册
  • 关键请求参数:
    • 手机号
    • 短信验证码
    • tenantId(租户ID)

2. 正常流程分析

正常注册流程:

  1. 用户输入手机号和正确验证码
  2. 系统验证后返回Token
  3. 后续请求携带Token进行身份认证

3. 漏洞验证步骤

任意注册漏洞

  1. 使用Burp Suite拦截注册请求
  2. 将验证码字段置空
  3. 发现即使验证码为空,系统仍返回有效Token
  4. 通过个人信息接口验证,确认新Token对应的是任意指定的手机号

任意登录漏洞

  1. 已有账户(如138号码)正常登录
  2. 攻击者在不知道验证码的情况下:
    • 输入任意验证码
    • 拦截响应包
    • 替换为之前生成的任意Token
  3. 系统接受伪造Token,成功登录目标账户

漏洞原理

  1. 验证码校验缺失:后端未对验证码进行有效校验,允许空值或任意值通过
  2. Token生成逻辑缺陷:Token生成仅依赖手机号,不验证验证码正确性
  3. 认证与授权分离:认证成功后,授权环节未二次验证用户身份真实性

漏洞利用

攻击场景

  1. 账户接管:攻击者可通过此漏洞登录任意用户账户
  2. 批量注册:自动化脚本可大量注册虚假账户
  3. 数据泄露:通过个人信息接口获取系统所有用户数据

利用步骤

  1. 获取已存在用户的手机号
  2. 调用注册/登录接口,置空验证码
  3. 获取返回的Token
  4. 使用Token访问系统功能

修复建议

  1. 强制验证码校验

    • 后端必须验证验证码的有效性
    • 拒绝空验证码请求
  2. Token生成增强

    • Token生成应结合验证码校验结果
    • 加入时间戳防止重放
  3. 接口分离

    • 将注册和登录接口分离
    • 注册需额外验证机制(如人工审核)
  4. 日志监控

    • 记录所有验证码验证失败尝试
    • 设置异常请求阈值告警
  5. 二次验证

    • 敏感操作需二次验证
    • 如短信/邮箱确认

漏洞挖掘技巧

  1. 置空测试:对关键字段(验证码、Token、ID等)尝试置空
  2. 接口关联分析:识别功能相似的接口(如本例的注册/登录一体化接口)
  3. 业务逻辑逆向:理解正常流程,寻找逻辑断点
  4. Token重用测试:验证Token是否可跨用户/跨场景使用

总结

本案例展示了逻辑漏洞的典型特征:

  • 看似简单的验证绕过(置空验证码)
  • 造成严重后果(完全接管账户)
  • 涉及多个环节(注册、登录、认证)

挖掘此类漏洞需要:

  1. 对业务逻辑的深入理解
  2. 系统性的测试方法
  3. 对验证机制的特别关注

通过本案例,安全研究人员应加强对业务逻辑漏洞的重视,开发者也应建立多层防御机制,避免单点验证失效导致系统沦陷。

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是否可跨用户/跨场景使用 总结 本案例展示了逻辑漏洞的典型特征: 看似简单的验证绕过(置空验证码) 造成严重后果(完全接管账户) 涉及多个环节(注册、登录、认证) 挖掘此类漏洞需要: 对业务逻辑的深入理解 系统性的测试方法 对验证机制的特别关注 通过本案例,安全研究人员应加强对业务逻辑漏洞的重视,开发者也应建立多层防御机制,避免单点验证失效导致系统沦陷。