如何进行电子钱包APP漏洞分析

雷蛇支付(Razer Pay)在新加坡和马来西亚被广泛使用,在该篇Writeup中,作者通过APP逆向分析,利用Frida调试,发现了雷蛇支付电子钱包(Razer Pay Ewallet)中的用户签名(Signature)生成漏洞,由此可读取雷蛇支付用户的聊天记录、删除用户绑定的银行账户并窃取用户个人敏感信息,漏洞最终获得了雷蛇官方将近$6,000的奖励。以下是作者的漏洞发现思路,仅当姿势学习借鉴。

漏洞背景

雷蛇(Razer Inc,RΛZΞR)是一家在新加坡创立的游戏周边设备公司,又被称为“绿光灯厂”,近年开始进军电子消费业务。雷蛇的两个总部分别设立在新加坡及美国圣地牙哥。2017年11月在香港联交所上市,产品面向游戏玩家,其产品大多数都以肉食动物命名。2018年推出电子钱包Razer Pay。2020年5月,开始生产外科口罩。

在雷蛇支付电子钱包(Razer Pay Ewallet)的请求防篡改机制中,除auth_token之外,还使用了参数signature对不同用户的请求进行签名验证,每一个对服务端的GET和POST请求都会附带一个经过编码的signature参数值和用户id,如下图所示:

如何进行电子钱包APP漏洞分析

因此,试图对任意请求参数的篡改重发都会无效,但经APK逆向分析发现,雷蛇支付电子钱包(Razer Pay Ewallet)存在用户签名(Signature)生成漏洞,结合Frida的分析利用可自动计算生成新的用户签名(Signature),由此可导致很多的越权(IDOR)问题。

我在使用Burp对雷蛇支付APP的网络请求进行抓包时发现,由于请求中用户签名(Signature)的保护,所以其中很多参数都是无法篡改的,因此,我名列前茅时间想到了注册另外一个雷蛇支付用户来进行配合测试,但在两个用户的同一请求的场景下,经会话Payload的替换操作后,执行无效,原因还是出在有用户签名(Signature)的会话请求保护。

我决定切实分析一下用户签名(Signature)的生成机制,在apktool 和 Jadx-Gui 的反编译帮助下,我对其APP的运行有了代码层次的理解,发现其中存在一个名为“MD5Encode”的方法函数,从名字上就知道是用了MD5加密算法。经过一些参数Payload的组合,我决定尝试一下生成用户签名(Signature),但怎么试也无法生成正确的用户签名,我猜想可能是参数次序错误,或它是一种非常规的MD5加密。

如何进行电子钱包APP漏洞分析

删除其他用户的绑定银行账户

不抛弃不放弃,我把其中涉及用户签名生成的所有相关代码拷贝出来,然后用IDE调试工具IntelliJ IDEA进行尝试生成,终于,在“MD5Encode”方法运用中,我组合对了正确的参数次序,不过由于有代码混淆,还需要做一些微调,但还算不太难。最终,在之前生成的请求主体中,插入正确的参数值,用上述代码即能生成正确的用户签名(Signature)字符串!

(小编分析,在以下多个用户签名的生成过程中,用到了用户自己的token,其为参数之一,然后经MD5Encode方法,可以生成与多个用户id对应的不同用户签名,也就是可以成功生成雷蛇服务端分配给多个用户的各个用户签名Signature)

如何进行电子钱包APP漏洞分析

如何进行电子钱包APP漏洞分析

由此,我首先想到的就是测试越权漏洞(IDOR),我选择了一个比较敏感的API接口/deleteBankAccount,也就是删除用户绑定的银行账户操作,然后在两个账户的测试场景下,竟然能成功删除掉另一雷蛇支付(Razer Pay)用户的绑定银行账户!

如何进行电子钱包APP漏洞分析

加入其他用户创建的聊天群组

到这步,我想肯定还有其它受Signature保护的API接口存在IDOR越权问题,于是我尝试用上述方法去做了一波测试,但毫无发现。而且其它API接口使用了不同代码混淆方法,导致我花费了很多时间去研究分析。没有头绪之时,那就用Frida来试试吧,Frida是一个非常好用的调试工具,我正好可以用它来识别一些可以hook利用的方法函数,结合上述的MD5Encode方法,找到正确的电子钱包代码包,同样可以用这些方法函数生成新的正确的用户签名Signature。

如以下frida.js代码实现的功能是为当前用户生成的新的用户签名,以加入其他用户创建的聊天群组:


// frida.js - Use this for recalculating signature for adding user to other people's chatgroup

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")

//Extra step - calculate new signature

var ret_value = this.MD5Encode("groupId=1x9&userIds=95xxx7&token=b6fxxxd3-2xxc-4xxf-bxx7-7fxxxxa6")

console.log("[+] signature= " + ret_value)

//Call method with original arguments so app doesn't crash ..

var ret_value = this.MD5Encode(arg) //original value

console.log("original ARG: " + arg)

return ret_value;

}

})

但是要运行Frida,需要root级别的访问,好在我另外发现了一个服务端漏洞可以让攻击者在一台root过的移动设备中执行操作,以下为在移动设备中启动Frida服务的命令:


$ adb shell

# sudo su

# /data/local/tmp/frida-server

之后,在另一个终端窗口下,运行以下命令:

$ frida -l frida.js -U com.mol.molwallet

然后,在移动设备中,我打开雷蛇支付APP,这其中任何调用到hook方法“MD5Encode”的操作都将会执行上述的frida.js脚本,最终我就能针对特定用户请求生成有效正确的用户签名Signature了,这里的测试用例是,我可以为我自己生成一个用户签名,以它为验证凭据加入其他用户创建的聊天群组中去,这种方式的危害之处在于,可以神不知鬼不觉地加入某个群组,然后获取别人的聊天内容,或点击领取抢掉别人发送的红包。

如何进行电子钱包APP漏洞分析

如何进行电子钱包APP漏洞分析

导致的其它安全问题

利用上述方法,我把其它受Signature影响的所有API接口都做了测试,发现可以从这些API接口获取用户群组聊天时分享的红包金额,另外还能修改并查看其他用户的转账记录和个人信息。

感谢你的阅读,相信你对“如何进行电子钱包APP漏洞分析”这一问题有一定的了解,快去动手实践吧,如果想了解更多相关知识点,可以关注亿速云网站!小编会继续为大家带来更好的文章!

文章标题:如何进行电子钱包APP漏洞分析,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/24621

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月13日 下午11:37
下一篇 2022年9月13日 下午11:38

相关推荐

  • todesk如何听到对方电脑声音

    todesk听到对方电脑声音的方法 1、首先点击电脑开始菜单,点击“运行” 2、输入gpedit.msc后,点击确定 3、打开计算机配置菜单下的管理模板,点击所有设置。 4、找到并双击打开“允许音频和视频播放重定向”选项 5、勾选已启用,点击确定保存设置并重启就可以了。 关于“todesk如何听到对…

    2022年9月26日
    6.8K00
  • 如何使用Masscan、Nmap、ELK做内网资产收集

    安装 安装masscan # yum install git gcc make libpcap-devel# git clone https://github.com/robertdavidgraham/masscan# cd masscan# make# cp bin/masscan /bin 安…

    2022年9月8日
    73800
  • jquery如何改变input的value属性

    在jquery中,可以利用val()方法来改变input的value属性;val()方法用于返回或者设置被选元素的value属性,value属性用于规定input元素的值,语法为“$(input元素对象).val(input修改后的value属性值);”。 本文操作环境:windows10系统、jq…

    2022年9月10日
    1.2K00
  • 如何进行移动app安全评估检测技术分析

    由于现今的网络技术日益发达,安卓 APP 的安全也有很多隐患,这些都需要我们不断地去注意,从而提高其安全性。人们基于系统程序、系统数据、基础业务的安全性以及应用程序出现的漏洞这几个方面,来不断地完善并且构成一个更加安全、稳定、完整的移动 APP 监测系统来确保移动 APP 的安全性,其将作为“恶意伤…

    2022年9月15日
    87000
  • Javascript如何实现空数组

    空数组 如果要清空一个数组,将数组的长度设置为0即可,额,这个有点简单。 var plants = [‘Saturn’, ‘Earth’, ‘Uranus’, ‘Mercury’, ‘Venus’, ‘Earth’, ‘Mars’, ‘Jupiter’];plants.length = 0;cons…

    2022年8月31日
    31400
  • MySQL慢查询日志怎么设置

    一、概述 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值(long_query_time,单位:秒)的SQL语句。默认情况下,MySQL不启动慢查询日志。本文简单介绍如何开启慢查询日志,如何用mysqldumpslow分析慢查询。 二、慢查询日志设置 …

    2022年9月15日
    1.1K00
  • excel页面布局位置在哪

    excel页面布局位置: 1、双击打开WPS 2、点击新建进入,选择新建excel空白文档 3、选择打印预览功能 4、点击“页面布局” 5、点击查看整体页面布局即可 到此,关于“excel页面布局位置在哪”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想…

    2022年8月27日
    54500
  • windows键盘驱动如何更新

    键盘驱动更新方法: 1、首先,我们打开我们的电脑,然后我们右击电脑桌面上的此电脑。 2、弹出的界面,我们点击属性。 3、弹出的界面,我们点击设备管理器。 4、弹出的界面,我们找到键盘,然后我们点击打开它。 5、然后我们右击里面的PS/2标准键盘。 6、弹出的界面,我们点击属性。 7、弹出的界面,我们…

    2022年9月22日
    80000
  • vue组件值变化但不刷新问题怎么解决

    今天分享文章“vue组件值变化但不刷新问题怎么解决”,主要从:组件值变化但不刷新强制组件刷新、bug复现、解决等几个方面为大家介绍,希望能帮到您。 组件值变化但不刷新强制组件刷新 在调用组件的时候,如果数据中只是某个属性变化(比如id)变化,在vue开发工具中看到变量值变化,但是组件上的数据就是不刷…

    2022年6月29日
    2.0K00
  • windows驱动精灵启动鼠标不动如何解决

    驱动精灵启动鼠标不动: 答:这是最新版的驱动精灵的bug。 这样的情况和电脑没有关系,是软件版本更新后造成的bug。 解决方法: 1、启动驱动精灵后,尝试拔出鼠标的USB接口,然后重新插入连接。 鼠标即可继续恢复正常使用。 2、强制重启电脑,重启时拔掉鼠标usb插口。 开机后再次插入连接即可。 驱动…

    2022年9月13日
    42500
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部