看我如何绕过滑块验证码拿到高危漏洞
字数 1411 2025-08-24 07:48:33

绕过滑块验证码获取高危漏洞的技术分析

1. 初步验证

1.1 短信炸弹漏洞测试

  • 目标系统:手机号验证码登录框
  • 初步测试:尝试获取验证码时出现滑块验证码
  • 测试方法:同时打开两个页面依次发送验证码
  • 发现:第二次发送成功,表明只有前端限制,后端无60秒间隔限制

2. 数据包分析

2.1 请求流程

  1. getPuzzle请求
  2. checkPuzzle请求
  3. sendMobileValidCode请求

2.2 getPuzzle请求分析

  • 请求体:
{
  "captchaType": "blockPuzzle"
}
  • 响应关键字段:
    • secretKey:加密密钥
    • originalImageBase64:原始图片的base64编码
    • jigsawImageBase64:小滑块图片的base64编码
    • token:验证令牌

2.3 checkPuzzle请求分析

  • 请求体:
{
  "captchaType": "blockPuzzle",
  "pointJson": "asdasdsasd/asdasdasd+2bUL0=",
  "token": "xxxxxxxxxxxxxxxxxxxx"
}
  • pointJson分析:
    • 实际为坐标{x:r,y:5}的加密值
    • x坐标:滑块拖动位置
    • y坐标:固定值5
    • 加密函数在JS中实现

2.4 sendMobileValidCode请求分析

  • 请求体:
{
  "mobile": "13xxxxxxxxx",
  "captchaVerification": "ta+1ocXhFWrWfuIejoyq1g=="
}
  • captchaVerification构成:
    • 格式:token + '---' + 加密值
    • 加密值来源:对pointJson解密后的值
    • 加密密钥:getPuzzle返回的secretKey

3. JS逆向分析

3.1 关键代码定位

  1. 查找pointJson加密逻辑
  2. 追踪captchaVerification生成过程
  3. 发现YAN_ZHENG_HUA_KUAI常量指向checkPuzzle请求

3.2 加密流程

  1. 滑块位置坐标{x:r,y:5}
  2. 使用secretKey进行加密
  3. 生成pointJson
  4. token与解密后的pointJson组合生成captchaVerification

4. 批量伪造实现

4.1 实现步骤

  1. 调用打码平台API识别滑块位置
    • 返回两个点坐标(左上角和右下角)
    • 提取左上角x坐标作为滑块位置
  2. 构造pointJson
    • 使用secretKey加密坐标{x:识别结果,y:5}
  3. 构造captchaVerification
    • 组合格式:token + '---' + 解密后的pointJson值
  4. 发送sendMobileValidCode请求

4.2 Python实现要点

  • 使用打码平台API获取滑块位置
  • 实现与JS相同的加密算法
  • 自动化请求流程

5. 优化思路

5.1 简化分析过程

  1. 直接猜测secretKey为加密密钥
  2. 分析加密模式和填充模式(通常在JS中可见)
  3. 直接使用密钥解密请求值,避免完整JS逆向

5.2 可行性评估

  1. 检查验证码每日发送数量限制
  2. 若无限制则继续深入
  3. 若有严格限制则考虑其他攻击面

6. 防御建议

6.1 服务端改进

  1. 严格限制验证码发送频率(后端验证)
  2. 增加滑块验证的二次校验
  3. 使用一次性secretKey并加强加密

6.2 客户端改进

  1. 增加JS代码混淆强度
  2. 关键加密逻辑使用WebAssembly实现
  3. 增加行为验证(如鼠标轨迹分析)

7. 总结

本案例展示了如何通过分析滑块验证码的实现逻辑,结合JS逆向和自动化工具绕过安全防护。关键在于:

  1. 识别前后端验证不一致
  2. 分析加密流程和密钥使用
  3. 自动化构造合法请求
  4. 评估攻击可行性和收益

这种技术可用于安全测试中验证系统防护强度,但请注意仅在授权范围内使用。

绕过滑块验证码获取高危漏洞的技术分析 1. 初步验证 1.1 短信炸弹漏洞测试 目标系统:手机号验证码登录框 初步测试:尝试获取验证码时出现滑块验证码 测试方法:同时打开两个页面依次发送验证码 发现:第二次发送成功,表明只有前端限制,后端无60秒间隔限制 2. 数据包分析 2.1 请求流程 getPuzzle请求 checkPuzzle请求 sendMobileValidCode请求 2.2 getPuzzle请求分析 请求体: 响应关键字段: secretKey :加密密钥 originalImageBase64 :原始图片的base64编码 jigsawImageBase64 :小滑块图片的base64编码 token :验证令牌 2.3 checkPuzzle请求分析 请求体: pointJson 分析: 实际为坐标 {x:r,y:5} 的加密值 x坐标:滑块拖动位置 y坐标:固定值5 加密函数在JS中实现 2.4 sendMobileValidCode请求分析 请求体: captchaVerification 构成: 格式: token + '---' + 加密值 加密值来源:对 pointJson 解密后的值 加密密钥: getPuzzle 返回的 secretKey 3. JS逆向分析 3.1 关键代码定位 查找 pointJson 加密逻辑 追踪 captchaVerification 生成过程 发现 YAN_ZHENG_HUA_KUAI 常量指向 checkPuzzle 请求 3.2 加密流程 滑块位置坐标 {x:r,y:5} 使用 secretKey 进行加密 生成 pointJson 将 token 与解密后的 pointJson 组合生成 captchaVerification 4. 批量伪造实现 4.1 实现步骤 调用打码平台API识别滑块位置 返回两个点坐标(左上角和右下角) 提取左上角x坐标作为滑块位置 构造 pointJson : 使用 secretKey 加密坐标 {x:识别结果,y:5} 构造 captchaVerification : 组合格式: token + '---' + 解密后的pointJson值 发送 sendMobileValidCode 请求 4.2 Python实现要点 使用打码平台API获取滑块位置 实现与JS相同的加密算法 自动化请求流程 5. 优化思路 5.1 简化分析过程 直接猜测 secretKey 为加密密钥 分析加密模式和填充模式(通常在JS中可见) 直接使用密钥解密请求值,避免完整JS逆向 5.2 可行性评估 检查验证码每日发送数量限制 若无限制则继续深入 若有严格限制则考虑其他攻击面 6. 防御建议 6.1 服务端改进 严格限制验证码发送频率(后端验证) 增加滑块验证的二次校验 使用一次性 secretKey 并加强加密 6.2 客户端改进 增加JS代码混淆强度 关键加密逻辑使用WebAssembly实现 增加行为验证(如鼠标轨迹分析) 7. 总结 本案例展示了如何通过分析滑块验证码的实现逻辑,结合JS逆向和自动化工具绕过安全防护。关键在于: 识别前后端验证不一致 分析加密流程和密钥使用 自动化构造合法请求 评估攻击可行性和收益 这种技术可用于安全测试中验证系统防护强度,但请注意仅在授权范围内使用。