安卓渗透测试抓包前置

安卓高版本抓包

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 思否

Android 高版本 HTTPS 抓包解决方案!(建议收藏)-技术圈 (proginn.com)

安卓模拟器+BURP 实现 app 抓包 - 1ndex- - 博客园 (cnblogs.com)