如何進(jìn)行電子錢包APP漏洞分析

雷蛇支付(razer pay)在新加坡和馬來西亞被廣泛使用,在該篇writeup中,作者通過app逆向分析,利用frida調(diào)試,發(fā)現(xiàn)了雷蛇支付電子錢包(razer pay ewallet)中的用戶簽名(signature)生成漏洞,由此可讀取雷蛇支付用戶的聊天記錄、刪除用戶綁定的銀行賬戶并竊取用戶個(gè)人敏感信息,漏洞最終獲得了雷蛇官方將近$6,000的獎(jiǎng)勵(lì)。以下是作者的漏洞發(fā)現(xiàn)思路,僅當(dāng)姿勢學(xué)習(xí)借鑒。

漏洞背景

雷蛇(Razer Inc,RΛZΞR)是一家在新加坡創(chuàng)立的游戲周邊設(shè)備公司,又被稱為“綠光燈廠”,近年開始進(jìn)軍電子消費(fèi)業(yè)務(wù)。雷蛇的兩個(gè)總部分別設(shè)立在新加坡及美國圣地牙哥。2017年11月在香港聯(lián)交所上市,產(chǎn)品面向游戲玩家,其產(chǎn)品大多數(shù)都以肉食動(dòng)物命名。2018年推出電子錢包Razer Pay。2020年5月,開始生產(chǎn)外科口罩。

在雷蛇支付電子錢包(Razer Pay Ewallet)的請求防篡改機(jī)制中,除auth_Token之外,還使用了參數(shù)signature對不同用戶的請求進(jìn)行簽名驗(yàn)證,每一個(gè)對服務(wù)端的GET和POST請求都會(huì)附帶一個(gè)經(jīng)過編碼的signature參數(shù)值和用戶id,如下圖所示:

如何進(jìn)行電子錢包APP漏洞分析

因此,試圖對任意請求參數(shù)的篡改重發(fā)都會(huì)無效,但經(jīng)APK逆向分析發(fā)現(xiàn),雷蛇支付電子錢包(Razer Pay Ewallet)存在用戶簽名(Signature)生成漏洞,結(jié)合Frida的分析利用可自動(dòng)計(jì)算生成新的用戶簽名(Signature),由此可導(dǎo)致很多的越權(quán)(IDOR)問題。

我在使用Burp對雷蛇支付APP的網(wǎng)絡(luò)請求進(jìn)行抓包時(shí)發(fā)現(xiàn),由于請求中用戶簽名(Signature)的保護(hù),所以其中很多參數(shù)都是無法篡改的,因此,我第一時(shí)間想到了注冊另外一個(gè)雷蛇支付用戶來進(jìn)行配合測試,但在兩個(gè)用戶的同一請求的場景下,經(jīng)會(huì)話Payload的替換操作后,執(zhí)行無效,原因還是出在有用戶簽名(Signature)的會(huì)話請求保護(hù)。

我決定切實(shí)分析一下用戶簽名(Signature)的生成機(jī)制,在apktool 和 Jadx-Gui 的反編譯幫助下,我對其APP的運(yùn)行有了代碼層次的理解,發(fā)現(xiàn)其中存在一個(gè)名為“MD5Encode”的方法函數(shù),從名字上就知道是用了MD5加密算法。經(jīng)過一些參數(shù)Payload的組合,我決定嘗試一下生成用戶簽名(Signature),但怎么試也無法生成正確的用戶簽名,我猜想可能是參數(shù)次序錯(cuò)誤,或它是一種非常規(guī)的MD5加密。

如何進(jìn)行電子錢包APP漏洞分析

刪除其他用戶的綁定銀行賬戶

不拋棄不放棄,我把其中涉及用戶簽名生成的所有相關(guān)代碼拷貝出來,然后用ide調(diào)試工具IntelliJ idea進(jìn)行嘗試生成,終于,在“MD5Encode”方法運(yùn)用中,我組合對了正確的參數(shù)次序,不過由于有代碼混淆,還需要做一些微調(diào),但還算不太難。最終,在之前生成的請求主體中,插入正確的參數(shù)值,用上述代碼即能生成正確的用戶簽名(Signature)字符串!

(小編分析,在以下多個(gè)用戶簽名的生成過程中,用到了用戶自己的token,其為參數(shù)之一,然后經(jīng)MD5Encode方法,可以生成與多個(gè)用戶id對應(yīng)的不同用戶簽名,也就是可以成功生成雷蛇服務(wù)端分配給多個(gè)用戶的各個(gè)用戶簽名Signature)

如何進(jìn)行電子錢包APP漏洞分析

如何進(jìn)行電子錢包APP漏洞分析

由此,我首先想到的就是測試越權(quán)漏洞(IDOR),我選擇了一個(gè)比較敏感的API接口/deleteBankAccount,也就是刪除用戶綁定的銀行賬戶操作,然后在兩個(gè)賬戶的測試場景下,竟然能成功刪除掉另一雷蛇支付(Razer Pay)用戶的綁定銀行賬戶!

如何進(jìn)行電子錢包APP漏洞分析

加入其他用戶創(chuàng)建的聊天群組

到這步,我想肯定還有其它受Signature保護(hù)的API接口存在IDOR越權(quán)問題,于是我嘗試用上述方法去做了一波測試,但毫無發(fā)現(xiàn)。而且其它API接口使用了不同代碼混淆方法,導(dǎo)致我花費(fèi)了很多時(shí)間去研究分析。沒有頭緒之時(shí),那就用Frida來試試吧,F(xiàn)rida是一個(gè)非常好用的調(diào)試工具,我正好可以用它來識(shí)別一些可以hook利用的方法函數(shù),結(jié)合上述的MD5Encode方法,找到正確的電子錢包代碼包,同樣可以用這些方法函數(shù)生成新的正確的用戶簽名Signature。

如以下frida.JS代碼實(shí)現(xiàn)的功能是為當(dāng)前用戶生成的新的用戶簽名,以加入其他用戶創(chuàng)建的聊天群組:

<br/>

// 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=1×9&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;

}

})

但是要運(yùn)行Frida,需要root級(jí)別的訪問,好在我另外發(fā)現(xiàn)了一個(gè)服務(wù)端漏洞可以讓攻擊者在一臺(tái)root過的移動(dòng)設(shè)備中執(zhí)行操作,以下為在移動(dòng)設(shè)備中啟動(dòng)Frida服務(wù)的命令:

<br/>

$ adb shell

# sudo su

# /data/local/tmp/frida-server

之后,在另一個(gè)終端窗口下,運(yùn)行以下命令:

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

然后,在移動(dòng)設(shè)備中,我打開雷蛇支付APP,這其中任何調(diào)用到hook方法“MD5Encode”的操作都將會(huì)執(zhí)行上述的frida.js腳本,最終我就能針對特定用戶請求生成有效正確的用戶簽名Signature了,這里的測試用例是,我可以為我自己生成一個(gè)用戶簽名,以它為驗(yàn)證憑據(jù)加入其他用戶創(chuàng)建的聊天群組中去,這種方式的危害之處在于,可以神不知鬼不覺地加入某個(gè)群組,然后獲取別人的聊天內(nèi)容,或點(diǎn)擊領(lǐng)取搶掉別人發(fā)送的紅包。

如何進(jìn)行電子錢包APP漏洞分析

如何進(jìn)行電子錢包APP漏洞分析

導(dǎo)致的其它安全問題

利用上述方法,我把其它受Signature影響的所有API接口都做了測試,發(fā)現(xiàn)可以從這些API接口獲取用戶群組聊天時(shí)分享的紅包金額,另外還能修改并查看其他用戶的轉(zhuǎn)賬記錄和個(gè)人信息。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊10 分享