挖洞经验 | 雷蛇电子钱包APP漏洞分析
字数 1087 2025-08-15 21:31:05

雷蛇电子钱包APP漏洞分析教学文档

漏洞概述

本教学文档详细分析雷蛇支付(Razer Pay)电子钱包APP中的用户签名(Signature)生成漏洞,该漏洞允许攻击者绕过签名验证机制,执行越权操作如读取聊天记录、删除绑定银行账户等。漏洞最终获得雷蛇官方近$6,000的奖励。

漏洞背景

雷蛇支付(Razer Pay)在新加坡和马来西亚广泛使用,其请求防篡改机制使用两个关键参数:

  • auth_token
  • signature (用于不同用户的请求签名验证)

每个GET/POST请求都会附带编码后的signature参数和用户ID,防止请求参数被篡改。

漏洞发现过程

1. 初步测试

  • 使用Burp抓包发现参数无法篡改
  • 尝试注册第二个用户进行测试,但会话Payload替换无效
  • 确认问题出在用户签名(Signature)的保护机制

2. 逆向分析

工具链:

  • apktool
  • Jadx-Gui (反编译工具)

发现关键方法:

  • MD5Encode方法函数(使用MD5加密算法)

3. 签名生成机制分析

步骤:

  1. 提取涉及用户签名生成的所有相关代码
  2. 使用IntelliJ IDEA进行调试
  3. 确定正确的参数组合次序
  4. 调整混淆后的代码

关键发现:

  • 签名生成使用用户自己的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;
    }
})

执行步骤:

  1. 在root设备上启动Frida服务:
    $ adb shell
    # sudo su
    # /data/local/tmp/frida-server
    
  2. 运行Frida脚本:
    $ frida -l frida.js -U com.mol.molwallet
    

2. 实际利用案例

  1. 加入其他用户的聊天群组

    • 生成有效签名加入任意群组
    • 可获取群聊内容
    • 可领取他人发送的红包
  2. 其他安全问题

    • 获取用户群组分享的红包金额
    • 修改/查看其他用户的转账记录
    • 查看/修改其他用户的个人信息

漏洞修复建议

  1. 签名生成机制改进:

    • 使用更安全的哈希算法(如SHA-256)
    • 加入时间戳和随机数防止重放攻击
    • 使用HMAC而非简单MD5
  2. 服务端验证加强:

    • 严格验证签名与用户身份的对应关系
    • 对敏感操作增加二次验证
  3. 代码混淆加强:

    • 使用更高级的混淆技术
    • 关键安全方法应动态加载

总结

本漏洞展示了移动应用安全中几个关键问题:

  1. 不安全的签名生成机制
  2. 缺乏足够的权限验证
  3. 客户端安全控制的不可靠性

通过逆向工程和动态分析工具(Frida)的结合使用,安全研究人员可以深入分析应用的安全机制并发现潜在漏洞。

雷蛇电子钱包APP漏洞分析教学文档 漏洞概述 本教学文档详细分析雷蛇支付(Razer Pay)电子钱包APP中的用户签名(Signature)生成漏洞,该漏洞允许攻击者绕过签名验证机制,执行越权操作如读取聊天记录、删除绑定银行账户等。漏洞最终获得雷蛇官方近$6,000的奖励。 漏洞背景 雷蛇支付(Razer Pay)在新加坡和马来西亚广泛使用,其请求防篡改机制使用两个关键参数: auth_token signature (用于不同用户的请求签名验证) 每个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 )示例: 执行步骤: 在root设备上启动Frida服务: 运行Frida脚本: 2. 实际利用案例 加入其他用户的聊天群组 : 生成有效签名加入任意群组 可获取群聊内容 可领取他人发送的红包 其他安全问题 : 获取用户群组分享的红包金额 修改/查看其他用户的转账记录 查看/修改其他用户的个人信息 漏洞修复建议 签名生成机制改进: 使用更安全的哈希算法(如SHA-256) 加入时间戳和随机数防止重放攻击 使用HMAC而非简单MD5 服务端验证加强: 严格验证签名与用户身份的对应关系 对敏感操作增加二次验证 代码混淆加强: 使用更高级的混淆技术 关键安全方法应动态加载 总结 本漏洞展示了移动应用安全中几个关键问题: 不安全的签名生成机制 缺乏足够的权限验证 客户端安全控制的不可靠性 通过逆向工程和动态分析工具(Frida)的结合使用,安全研究人员可以深入分析应用的安全机制并发现潜在漏洞。