您好,登錄后才能下訂單哦!
這篇文章的內容主要圍繞如何進行電子錢包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,如下圖所示:
因此,試圖對任意請求參數的篡改重發都會無效,但經APK逆向分析發現,雷蛇支付電子錢包(Razer Pay Ewallet)存在用戶簽名(Signature)生成漏洞,結合Frida的分析利用可自動計算生成新的用戶簽名(Signature),由此可導致很多的越權(IDOR)問題。
我在使用Burp對雷蛇支付APP的網絡請求進行抓包時發現,由于請求中用戶簽名(Signature)的保護,所以其中很多參數都是無法篡改的,因此,我第一時間想到了注冊另外一個雷蛇支付用戶來進行配合測試,但在兩個用戶的同一請求的場景下,經會話Payload的替換操作后,執行無效,原因還是出在有用戶簽名(Signature)的會話請求保護。
我決定切實分析一下用戶簽名(Signature)的生成機制,在apktool 和 Jadx-Gui 的反編譯幫助下,我對其APP的運行有了代碼層次的理解,發現其中存在一個名為“MD5Encode”的方法函數,從名字上就知道是用了MD5加密算法。經過一些參數Payload的組合,我決定嘗試一下生成用戶簽名(Signature),但怎么試也無法生成正確的用戶簽名,我猜想可能是參數次序錯誤,或它是一種非常規的MD5加密。
不拋棄不放棄,我把其中涉及用戶簽名生成的所有相關代碼拷貝出來,然后用IDE調試工具IntelliJ IDEA進行嘗試生成,終于,在“MD5Encode”方法運用中,我組合對了正確的參數次序,不過由于有代碼混淆,還需要做一些微調,但還算不太難。最終,在之前生成的請求主體中,插入正確的參數值,用上述代碼即能生成正確的用戶簽名(Signature)字符串!
(小編分析,在以下多個用戶簽名的生成過程中,用到了用戶自己的token,其為參數之一,然后經MD5Encode方法,可以生成與多個用戶id對應的不同用戶簽名,也就是可以成功生成雷蛇服務端分配給多個用戶的各個用戶簽名Signature)
由此,我首先想到的就是測試越權漏洞(IDOR),我選擇了一個比較敏感的API接口/deleteBankAccount,也就是刪除用戶綁定的銀行賬戶操作,然后在兩個賬戶的測試場景下,竟然能成功刪除掉另一雷蛇支付(Razer Pay)用戶的綁定銀行賬戶!
到這步,我想肯定還有其它受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了,這里的測試用例是,我可以為我自己生成一個用戶簽名,以它為驗證憑據加入其他用戶創建的聊天群組中去,這種方式的危害之處在于,可以神不知鬼不覺地加入某個群組,然后獲取別人的聊天內容,或點擊領取搶掉別人發送的紅包。
利用上述方法,我把其它受Signature影響的所有API接口都做了測試,發現可以從這些API接口獲取用戶群組聊天時分享的紅包金額,另外還能修改并查看其他用戶的轉賬記錄和個人信息。
感謝你的閱讀,相信你對“如何進行電子錢包APP漏洞分析”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注億速云網站!小編會繼續為大家帶來更好的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。