记一次金融站点的验签破解实战
字数 1344 2025-08-25 22:58:29

金融站点验签破解实战教学文档

1. 背景概述

本文记录了一次针对金融站点前端加签验证机制的破解过程。该站点采用客户端加签、服务端验签的安全机制,每次请求都会对数据包进行签名验证。

2. 破解思路

整体解决思路分为三个主要步骤:

  1. 确定加签关键字
  2. 分析前端代码获取加签算法
  3. 使用Burpy插件实现自动化加签

3. 工具准备

  • Burpy插件:一款BurpSuite插件,可自定义Python脚本对数据包进行加解密
    • GitHub地址:https://github.com/mr-m0nst3r/Burpy
  • Python execjs模块:用于调用JavaScript加密函数
  • 浏览器开发者工具:用于分析前端JavaScript代码

4. 加签机制分析

4.1 加签参数识别

通过测试发现服务端会对每个请求的两个关键参数进行验签:

  • _msgid:请求唯一标识
  • _sign:数据签名

如果数据包被修改或重复发送相同数据包,服务端会返回"验证签名失败!"的错误。

4.2 _msgid生成算法

  1. 使用浏览器开发者工具全局搜索_msgid
  2. 定位到对应的UUID生成算法
  3. 将JS加密代码提取到单独的sign.js文件
  4. 使用Python execjs模块调用sign.js中的uuid函数进行测试

4.3 _sign生成算法

  1. 通过"sign"关键字定位到getSign函数
  2. 调试分析发现:
    • getSign函数接收一个字典格式的requestObject参数
    • 对字典数据进行处理后得到参数"sb"的值
    • 将"sb"的值进行MD5加密后得到_sign的值
  3. requestObject的组成:
    • 不固定参数:根据业务功能点不同而变化
    • 固定参数:token、msgid、app_id、redisIdBindCustno(添加到字典数据尾部)

5. 加签脚本编写

5.1 JavaScript部分

  1. 将getSign()函数的加密算法提取到sign.js文件中
  2. 确保算法逻辑完整保留

5.2 Python部分

  1. 编写脚本调用sign.js中的加密函数
  2. 实现自动生成_msgid_sign参数
  3. 注意事项:
    • 传入encrypt函数的body必须为str类型
    • 返回时也必须为str类型

6. Burpy插件配置

  1. 安装并配置Burpy插件
  2. 加载编写好的Python加签脚本
  3. 插件会自动替换数据包中的加签参数

7. 关键点总结

  1. 参数识别:准确识别_msgid_sign是关键第一步
  2. 算法定位:通过关键字搜索和调用栈分析定位加密函数
  3. 参数组成:理解requestObject的固定和不固定部分
  4. 数据类型:确保传入和返回的数据类型一致(str类型)
  5. 自动化实现:通过Burpy实现请求的自动加签

8. 防御建议

针对此类破解,站点可采取以下防御措施:

  1. 增加代码混淆,加大逆向难度
  2. 使用动态密钥或时间戳增强签名安全性
  3. 实现服务端请求频率限制
  4. 对关键参数进行二次加密
  5. 定期更新加密算法

9. 扩展应用

此方法可应用于:

  1. 金融类应用的接口测试
  2. 安全审计中的签名机制验证
  3. 自动化测试中的签名处理
  4. 安全研究中的加密算法分析

通过本实战案例,可以系统性地掌握前端加签机制的分析方法和自动化破解技术。

金融站点验签破解实战教学文档 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. 扩展应用 此方法可应用于: 金融类应用的接口测试 安全审计中的签名机制验证 自动化测试中的签名处理 安全研究中的加密算法分析 通过本实战案例,可以系统性地掌握前端加签机制的分析方法和自动化破解技术。