繞過小程序簽名驗證
上官雨寶2022-07-21 08:30:00
繞過小程序簽名驗證
在一些關鍵業務接口,系統通常會對請求參數進行簽名驗證,一旦篡改參數服務端就會提示簽名校驗失敗。在黑盒滲透過程中,如果沒辦法繞過簽名校驗,那么就無法進一步漏洞檢測。
微信小程序的前端代碼很容易被反編譯,一旦簽名加密算法和密鑰暴漏,找到參數的排序規則,那么就可以篡改任意數據并根據算法偽造簽名。
01、常見簽名算法
首先呢,我們需要注意的是,加密和簽名是兩回事,加密是為了防止信息泄露,而簽名的目的是防止數據被篡改。
哈希算法的不可逆,以及非對稱算法(私鑰簽名,公鑰驗簽),為簽名的實現提供了必要的前提。
常見的簽名算法,如:
MD5、SHA1、SHA256、HMAC-SHA1、HMAC-SHA256、MD5WithRSA、SHA1WithRSA 、SHA256WithRSA等。
各種簽名示例如下:

可以看到常見的HASH簽名算法輸出長度是固定的,RSA簽名長度取決于密鑰大小,輸出相對較長。
02、RSA簽名繞過
下面我們通過一個簡單的RSA簽名繞過的案例,來理解簽名逆向的過程。
比如,在一個微信小程序游戲的場景里,用戶在游戲結束的時候,需要將游戲成績發送到后端,以此來記錄玩家的分數。
因調用API時對請求參數進行簽名驗證,服務器會對該請求參數進行驗證是否合法,所以當我們嘗試去篡改游戲成績的時候,就會提示簽名異常。那么,該如何破局呢?

(1)微信小程序反編譯解包
使用模擬器獲取微信小程序的.wxapkg包

使用反編譯腳本解包,獲取小程序前端源碼。

(2)逆向破解小程序參數簽名
將小程序的前端代碼復制到本地,Sign值比較長,盲猜RSA簽名算法,全局搜索關鍵字,因關鍵js代碼未作混淆加密,很容易就獲取到了RSA簽名算法和私鑰。

最常見的是根據參數名稱將所有請求參數按ASCII碼排序,而在這里我們很容易地就可以從前端代碼里獲取到參數順序。

(3)基于jsrsasign的rsa簽名驗簽,嘗試篡改請求參數,構建簽名計算Sign值。
構建http數據包,成功偽造簽名篡改游戲成績。

文章轉自公眾號:黑客技術與網絡安全
上官雨寶
是水水水水是