系統校驗
在Android 7.0 之后,默認情況下 app 只信任系統級別的 CA 。從 chls.pro/ssl 安裝的證書是在用戶級,這導致了無法攔截應用流量
配置burp
配置代理
burp導出證書
也可以在做了代理的手機瀏覽器中輸入 http://burp 下載證書
在電腦端為手機安裝證書 需要手機root
openssl x509 -inform DER -in cacert.der -out cacert.pem #導出的der證書轉換為pem格式
openssl x509 -inform PEM -subject_hash_old -in cacert.pem|head -1 #打印hash,得到9a5ba575
cp burp.pem 9a5ba575.0
adb push 9a5ba575.0 /system/etc/security/cacerts/#將證書傳到系統根證書目錄
adb shell chmod 644 /system/etc/security/cacerts/9a5ba575.0
abd reboot
自簽名證書
有時候會碰到安裝了證書也無法抓包的問題,這時可以考慮生成一個自簽名證書導入burpsuite
OPENSSL下載地址:https://slproweb.com/products/Win32OpenSSL.html
生成一個自簽名的證書
cp "C:\Program Files\OpenSSL-Win64\bin\cnf\openssl.cnf" .
openssl req -x509 -days 730 -nodes -newkey rsa:2048 -outform der -keyout server.key -out ca.der -extensions v3_ca -config openssl.cnf #創建一個新的根證書
openssl rsa -in server.key -inform pem -out server.key.der -outform der #轉為der格式
openssl pkcs8 -topk8 -in server.key.der -inform der -out server.key.pkcs8.der -outform der –nocrypt #將key轉換為pkcs8格式
將證書導入到burp中
在Burp內導入自簽名證書后,掛上Burp的代理訪問,Burp會自動使用我們剛才生成的根證書簽發當前域名的證書。
證書的簽發者信息就是我們剛才在openssl req內所填寫的。
在手機上安裝剛才生成的證書
adb shell
su
cd /data/misc/user/0/cacerts-added/ #進入證書安裝路徑
ls #顯示安裝的證書
mount -o rw,remount /system #重新掛載 /
chmod 777 /system #給予權限
mv d58e1f78.0 /system/etc/security/cacerts/ #將證書復制到根目錄
reboot
雙向認證
APP 雙向校驗,即服務器要認證請求淶源是否真實客戶端(來自真實證書),大概原理這樣:
app -->服務端(證書)---- ok
app(證書)<--服務端---- ok
解決方案分為兩種:
1.服務端以為 burp 是客戶端 (逆向 APP ,獲得證書導入到 burp)
2.APP 以為 burp是服務端( Hook 繞過)
解決方案1
導出apk
修改.apk后綴為.zip並解壓
從assets等資源目錄找到后綴名為p12/pfx/pem等的證書文件
如果是p12類型,可將其直接導入Burpsuite。
host寫app的域名如:*.baidu.com
導入找到的p12證書,可能需要密碼
獲取密碼,將apk放入jeb搜索證書文件關鍵字符
解決方案2
某些客戶端也會驗證服務器證書是否是指定的證書。
除逆向直接刪除這部分邏輯外,更簡便的方法是,使用Frida對客戶端進行Hook,讓客戶端的所有驗證都能通過。
使用Frida的優勢在於不用逆向,基本上針對大部分此類App都是可用的。
電腦端安裝
python3 -m pip install frida
python3 -m pip install frida-tools
手機端安裝
adb shell
su
getprop ro.product.cpu.abi #查看Android手機設備設置 返回arm64-v8a
frida -version #在電腦端查看安裝的frida版本
下載對應frida-server並安裝,注意版本號對應
下載地址:https://github.com/frida/frida/releases
下載后進行解壓,解壓后的文件重命名為frida-server並復制到手機
adb push firda-server /data/local/tmp #將frida-server放到手機的這個目錄下
adb forward tcp:27042 tcp:27042 #轉發端口
adb forward tcp:27043 tcp:27043
adb shell
su
cd /data/local/tmp
chmod 755 frida-server #賦予可執行權限
./frida-server #后台運行frida-server
在起一個窗口
frida-ps -U
加載腳本:frida -U -1 www.js -f 名稱 –-no-pause
名稱:app名稱如 com.baidu.a
burp就能夠正常抓包了