安卓渗透测试抓包前置
安卓高版本抓包
Android 7.0 之后增加了对第三方证书的限制,抓包工具(charles、fiddler等)提供的证书都无法通过校验,也就无法抓取HTTPS请求了,对测试工作影响很大。
突破 Android 7.0 用户 CA 证书限制
方法 1 - 安装证书到系统证书目录: 需要 Root 权限,把 CA 证书直接安装到系统证书目录下。
方法 2 - 使用 Android 7.0 以下系统: 从源头抹平用户证书限制,这个最简单直接.
方法 3 - 使用平行空间等虚拟系统: 使用 HttpCanary 平行空间或 VMOS App 等虚拟系统,在手机上虚拟出 Android 7.0 以下系统环境。
导出burpsuite证书,以DER格式导出证书
转换证书格式,将der格式转换为pem格式:
openssl x509 -inform DER -in cacert.der -out cacert.pem
Android 的受信任 CA 以特殊格式存储在 / system/etc/security/cacerts,需要将pem格式的证书保存为hash命名方式,以0结尾
openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1
>9a5ba575
mv cacert.pem 9a5ba575.0
连接adb设备
adb devices
adb -s 127.0.0.1:58526 shell
将证书复制到设备,并修改权限
adb remount
adb push 9a5ba575.0 /system/etc/security/cacerts/
adb reboot
HttpCanary(小黄鸟)抓包
经过测试发现支持安卓版本7-11安卓12出现无法抓包现象
安卓虚拟机
EdXposed JustTrustMe
平行空间 JustTrustMe
模拟器抓包思路
雷电模拟器(其他模拟器也行)
Xposed+JustTrustMe
Magisk+JustTrustMe
写入证书
安卓微信小程序抓包
安卓系统 7.0 以下版本,不管微信任意版本,都会信任系统提供的证书
安卓系统 7.0 以上版本,微信 7.0 以下版本,微信会信任系统提供的证书
安卓系统 7.0 以上版本,微信 7.0 以上版本,微信只信任它自己配置的证书列表
基于上述我们解决的方式如下:
1、将证书安装到系统证书中(需要root)
2、苹果手机(苹果手机不受此影响)
3、采用安卓系统低于7.0的模拟器
微信小程序逆向解包
安卓小程序保存路径
/data/data/com.tencent.mm/MicroMsg/{⽤户ID}/appbrand/pkg/
上边路径里面就是小程序文件(.wxapkg结尾)
解包工具
环境:node
wxappUnpacker(需要配置node.js环境):https://github.com/xuedingmiaojun/wxappUnpacker
关闭SSL证书验证抓包
突破SSL pinning的方法最简单的就是使用Xposed+JustTrustMe,为了安全起见最好使用模拟器,比如我用的mumu模拟器。本文假设已经安装好了Fiddler和模拟器,下文主要是Xposed+JustTrustMe的安装及Fiddler配合他们抓APP数据过程。
模块
JustTrustMe
TrustMeAlready
SSLUnpinning
JustTrustMe:https://github.com/Fuzion24/JustTrustMe
TrustMeAlready: https://github.com/ViRb3/TrustMeAlready
SSLUnpinnning: https://github.com/ac-pm/SSLUnpinning_Xposed
参考
从原理到实战,全面总结 Android HTTPS 抓包 - SegmentFault 思否