看我如何绕过滑块验证码拿到高危漏洞
字数 1411 2025-08-24 07:48:33
绕过滑块验证码获取高危漏洞的技术分析
1. 初步验证
1.1 短信炸弹漏洞测试
- 目标系统:手机号验证码登录框
- 初步测试:尝试获取验证码时出现滑块验证码
- 测试方法:同时打开两个页面依次发送验证码
- 发现:第二次发送成功,表明只有前端限制,后端无60秒间隔限制
2. 数据包分析
2.1 请求流程
- getPuzzle请求
- checkPuzzle请求
- 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 关键代码定位
- 查找
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逆向和自动化工具绕过安全防护。关键在于:
- 识别前后端验证不一致
- 分析加密流程和密钥使用
- 自动化构造合法请求
- 评估攻击可行性和收益
这种技术可用于安全测试中验证系统防护强度,但请注意仅在授权范围内使用。