记一次金融站点的验签破解实战
字数 1344 2025-08-25 22:58:29
金融站点验签破解实战教学文档
1. 背景概述
本文记录了一次针对金融站点前端加签验证机制的破解过程。该站点采用客户端加签、服务端验签的安全机制,每次请求都会对数据包进行签名验证。
2. 破解思路
整体解决思路分为三个主要步骤:
- 确定加签关键字
- 分析前端代码获取加签算法
- 使用Burpy插件实现自动化加签
3. 工具准备
- Burpy插件:一款BurpSuite插件,可自定义Python脚本对数据包进行加解密
- GitHub地址:https://github.com/mr-m0nst3r/Burpy
- Python execjs模块:用于调用JavaScript加密函数
- 浏览器开发者工具:用于分析前端JavaScript代码
4. 加签机制分析
4.1 加签参数识别
通过测试发现服务端会对每个请求的两个关键参数进行验签:
_msgid:请求唯一标识_sign:数据签名
如果数据包被修改或重复发送相同数据包,服务端会返回"验证签名失败!"的错误。
4.2 _msgid生成算法
- 使用浏览器开发者工具全局搜索
_msgid - 定位到对应的UUID生成算法
- 将JS加密代码提取到单独的sign.js文件
- 使用Python execjs模块调用sign.js中的uuid函数进行测试
4.3 _sign生成算法
- 通过"sign"关键字定位到getSign函数
- 调试分析发现:
- getSign函数接收一个字典格式的requestObject参数
- 对字典数据进行处理后得到参数"sb"的值
- 将"sb"的值进行MD5加密后得到
_sign的值
- requestObject的组成:
- 不固定参数:根据业务功能点不同而变化
- 固定参数:token、msgid、app_id、redisIdBindCustno(添加到字典数据尾部)
5. 加签脚本编写
5.1 JavaScript部分
- 将getSign()函数的加密算法提取到sign.js文件中
- 确保算法逻辑完整保留
5.2 Python部分
- 编写脚本调用sign.js中的加密函数
- 实现自动生成
_msgid和_sign参数 - 注意事项:
- 传入encrypt函数的body必须为str类型
- 返回时也必须为str类型
6. Burpy插件配置
- 安装并配置Burpy插件
- 加载编写好的Python加签脚本
- 插件会自动替换数据包中的加签参数
7. 关键点总结
- 参数识别:准确识别
_msgid和_sign是关键第一步 - 算法定位:通过关键字搜索和调用栈分析定位加密函数
- 参数组成:理解requestObject的固定和不固定部分
- 数据类型:确保传入和返回的数据类型一致(str类型)
- 自动化实现:通过Burpy实现请求的自动加签
8. 防御建议
针对此类破解,站点可采取以下防御措施:
- 增加代码混淆,加大逆向难度
- 使用动态密钥或时间戳增强签名安全性
- 实现服务端请求频率限制
- 对关键参数进行二次加密
- 定期更新加密算法
9. 扩展应用
此方法可应用于:
- 金融类应用的接口测试
- 安全审计中的签名机制验证
- 自动化测试中的签名处理
- 安全研究中的加密算法分析
通过本实战案例,可以系统性地掌握前端加签机制的分析方法和自动化破解技术。