小程序绕过sign签名思路
字数 1739 2025-08-06 12:21:05
小程序Sign签名绕过技术深度解析
1. Sign签名概述
1.1 Sign定义与作用
Sign签名是用于验证数据完整性和真实性的安全机制,主要功能包括:
- 防止参数篡改
- 防止请求伪装
- 防止重放攻击
- 防止数据泄露
1.2 常见生成方式
Sign通常由以下元素组合生成:
- 秘钥(固定或动态)
- 时间戳
- 特殊字符
- 随机数(nonce)
- 业务参数
经过特定排序后使用加密算法处理,常见加密算法:
- MD5(最常见)
- AES
- SHA系列
2. 常见绕过手法
2.1 直接测试方法
-
弱凭据测试:
- 检查是否为Base64编码(可解码查看原始数据)
- 检查是否为MD5格式(尝试解密)
- 检查是否为简单拼接(如参数直接连接)
-
删除/置空测试:
- 直接删除sign字段
- 将sign值置空
- 修改sign值为随机值
-
重放测试:
- 使用历史有效的sign值
- 修改时间戳但不改sign
2.2 逆向分析方法
当直接测试无效时,可采取逆向分析:
- 反编译小程序获取源码
- 全局搜索加密函数(如MD5、encrypt等关键词)
- 分析sign生成逻辑
3. 详细绕过流程
3.1 工具准备
3.2 操作步骤
步骤1:获取小程序包
- Windows路径:
C:\Users\{用户名}\Documents\WeChat Files\Applet\{小程序ID}\ - 操作要点:
- 先清空微信小程序
- 打开目标小程序并操作多个功能
- 确保所有wxapkg文件下载完成
步骤2:反编译源码
- 使用Unpacker解密加密的wxapkg
- 使用wxapkg-convertor反编译为可读源码
步骤3:分析加密逻辑
-
全局搜索关键词:
- "sign"
- "MD5"
- "encrypt"
- "generateSign"
-
典型加密函数分析(案例):
function encryptSign(t) {
var r = t.biz_content ? JSON.parse(t.biz_content) : {};
var n = [];
for (var o in t) "biz_content" !== o && n.push(o + "=" + t[o]);
n.sort();
var a = n.join("&") + "ihos-xxx-8";
return md5(a).toUpperCase();
}
解析:
- 遍历参数对象t
- 处理biz_content参数(JSON转对象)
- 排除biz_content外的参数以"key=value"形式存入数组
- 按字母升序排序
- 用"&"连接成字符串
- 追加固定字符串"ihos-xxx-8"
- MD5加密后转大写
步骤4:回溯调用链
- 查找
encryptSign调用位置 - 分析参数来源:
method: 接口名(常量)app_id: 固定值token_type: "api_credentials"nonce_str: 时间戳version: "v1.0"token: 登录凭证(可能为空)biz_content: 业务参数
步骤5:重构Sign
- 按规则组装参数:
- 按字母顺序排列参数名
- 用"&"连接键值对
- 追加固定字符串
- MD5加密并转大写
步骤6:测试验证
- 使用生成的sign替换原请求中的值
- 修改关键参数(如金额、ID等)
- 验证是否绕过校验
4. 自动化测试方案(Burpy插件)
4.1 Burpy介绍
GitHub项目:mr-m0nst3r/Burpy
功能:打通BurpSuite和Python,实现自动加解密
4.2 配置步骤
- 指定Python脚本路径
- 两个核心开关:
- Enable Processor:用于Intruder等暴力破解时的payload处理
- Enable Auto Enc/Dec:自动加解密重放请求
4.3 脚本编写示例
def processor(payload):
# Intruder payload处理逻辑
return encrypt(payload)
def encrypt(data):
# 实现加密算法
return encrypted_data
def decrypt(data):
# 实现解密算法
return decrypted_data
4.4 使用模式
- 手动模式:
- 右键选择加解密操作
- 自动模式:
- 开启Enable Auto Enc/Dec
- 重放时自动加解密
5. 防御建议
5.1 强化Sign设计
- 使用动态秘钥
- 加入时效性控制(短时效时间戳)
- 使用更安全的算法(如HMAC-SHA256)
- 关键操作使用二次验证
5.2 服务端校验
- 重放攻击检测
- 参数合法性校验
- 频率限制
6. 总结
Sign绕过核心思路:
- 先尝试简单绕过(删除/置空)
- 分析sign格式尝试解密
- 逆向分析生成逻辑
- 重构sign实现参数篡改
- 结合自动化工具提高效率
此技术可应用于:
- 支付金额篡改
- 越权访问
- 敏感信息泄露
- 业务逻辑绕过等场景