前言
做安全測試的都會遇到測試某微信小程序,而微信小程序基本都是基于HTTPS的,所以抓取HTTPS數(shù)據(jù)包就是最關(guān)鍵的一步。最近幾天折騰了一下,整理了比較簡單、方便的三種方法。
條件
抓取微信小程序數(shù)據(jù)包的關(guān)鍵點,就是SSL證書綁定的問題。
在安卓系統(tǒng)7.0以下的版本,不管微信是什么版本,都會信任系統(tǒng)提供的證書,而現(xiàn)在微信版本已經(jīng)到了7.0.15 且安裝老版本也會強制用戶升級,且微信只信任系統(tǒng)及自身內(nèi)置的證書。
具體如下
安卓系統(tǒng)7.0以下:微信的任意版本,都會信任用戶提供的證書
安卓系統(tǒng)7.0以上:微信7.0以下版本,微信會信任用戶提供的證書
安卓系統(tǒng)7.0以上:微信7.0以上版本,微信只信任系統(tǒng)及自身內(nèi)置的證書
IOS不做探討。
實驗環(huán)境
Redmi Note 4X 手機(未ROOT)
Android 手機:MIUI 11.0.2
Android 內(nèi)核版本:7.0
微信:WeChat 7.0.15
MuMu 模擬器 版本:1.9.15
Android 內(nèi)核版本:6.0.1
微信:WeChat 7.0.10
VirtualXposed :0.15.1
XPosed 和 JustTrustMe 抓包
簡介:XPosed 是一個框架,用來改變系統(tǒng)的某些關(guān)鍵操作。JustTrustMe 用來禁用、繞過SSL 證書驗證。
使用這種方法進行抓包的時候要求安卓手機必須需要ROOT。
所以我這里采用網(wǎng)易MuMu模擬器。
官網(wǎng)直接下載MAC版本,安裝。Android 內(nèi)核版本為6.0.1。

先安裝XPosed,下載地址為:https://repo.xposed.info/module/de.robv.android.xposed.installer

Android 版本5.0 以上點擊該鏈接。

來到該頁面。點擊apk下載并安裝到網(wǎng)易MuMu模擬器。

安裝Xposed框架。

注意這里設(shè)置MuMu開啟ROOT權(quán)限。否則安裝不成功。

勾選"開啟ROOT權(quán)限"。解決"Failed to get root access"錯誤。

下載安裝以后。

點擊"允許",之后重啟設(shè)備。


顯示Xposed框架成功激活。
接下來下載安裝JustTrustMe。github直接下載后拖進MuMu模擬器即可。
在Xposed install 中選擇模塊,勾選"JustTrustMe"

重啟設(shè)備后即可抓取微信小程序數(shù)據(jù)包。
配置手動代理。

burpsuite添加Proxy。即可抓取數(shù)據(jù)包。

VirtualXposed 和 JustTrustMe 抓包
簡介:和上一種方法原理一樣。都是利用的Xposed框架和JustTrustMe模塊。只不過可以在非ROOT環(huán)境下運行。這是因為VirtualXposed是基于VirtualApp和epic在非ROOT環(huán)境下運行Xposed框架的實現(xiàn)。
我這里選擇安裝在紅米非ROOT的安卓手機上。

VirtualXposed 下載地址 https://github.com/android-hacker/VirtualXposed/releases
我這里下載的是0.15.1版本。

安裝完成顯示Xposed框架為激活狀態(tài)。
接著下載JustTrustMe,從github下載后,再將JustTrustMe克隆安裝在VirtualXposed中,并啟用JustTrustMe模塊。


重啟設(shè)備。再將需要抓取數(shù)據(jù)包的app(微信)克隆到VirtualXposed中。


打開微信的小程序。
并在手機的網(wǎng)絡(luò)上配置代理。burpsuite抓包即可。


坑點:
在VirtualXposed打開微信時,有可能提示"打開應(yīng)用 com.tencent.mm 失敗"。嘗試從老版本微信更新有可能解決該問題。
Burp CA抓包
簡介:在一臺已經(jīng)ROOT環(huán)境的設(shè)備上,如模擬器,把burp CA證書安裝在系統(tǒng)可信任證書中,來抓取微信小程序的數(shù)據(jù)包。條件是微信版本7.0以下。
先導(dǎo)出burp CA證書,以DER格式導(dǎo)出CA證書,保存為cacert.der。


Android使用PEM格式的證書,并且文件名為subject_hash_old值并以.0結(jié)尾,存儲在/system/etc/security/cacerts目錄下。我們需要使用openssl工具將DER轉(zhuǎn)換成PEM,然后輸出subject_hash_old并重命名該文件。
命令為
openssl x509 -inform DER -in cacert.der -out cacert.pem
openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1
mv cacert.pem <hash>.0
在MAC終端上依次運行以上命令。

本地就會輸出9a5ba575.0文件。

然后將該證書文件拷貝到MuMu模擬器的/system/etc/security/cacerts 目錄下。

配置網(wǎng)絡(luò)代理,burp即可抓取微信小程序數(shù)據(jù)包。

注意:這里測試的是微信 6.6.0版本(從PP助手的歷史版本下載來的)。測試微信7.0版本無法抓取HTTPS數(shù)據(jù)包。
總結(jié)
力所能及,沒有太復(fù)雜的流程,但這三種方法也并非完全的一勞永逸。
參考資料
聽說安卓微信 7.0 不能抓 https?
如何使用Xposed+JustTrustMe來突破SSL Pinning
如何在Android Nougat中正確配置Burp Suite?