在做app测试的时候,经常有抓不到包的情况,即使是导入了burp证书后,仍然无法抓取https的数据包,这种情况一般是遇到了ssl pinning。
0x01 替换系统证书
在android 7.0以前,系统导入burp证书为用户权限能够绕过部分未做证书校验的APP,但是7.0及以后应用默认不再信任用户证书,导入burp证书后仍然会提示证书错误,抓不到https的包。
这种情况下一般采用替换系统证书的方法,原理是将burp的证书直接导入为系统证书,前提是手机需要ROOT权限。导入后系统会把burp当成系统证书,自然就能中间人代理https流量了。
具体步骤如下:
1 | 下载burp证书,导出为cacert.der,然后转换为pem格式 |
系统证书的目录是:/system/etc/security/cacerts/ 每个证书的命名规则为:. Certificate_Hash 表示证书文件的 hash 值,Number 是为了防止证书文件的 hash 值一致而增加的后缀; 证书的 hash 值可以由命令计算出来,在终端输入 openssl x509 -subject_hash_old -in ,其中 Certificate_File 为证书路径,将证书重命名为 hash.0 放入系统证书目录,之后你就可以正常抓包了。
0x02 Magisk+Always Trust User
上述应用不认用户证书的解决方案还有一种,就是magisk加上MagiskTrustUserCerts。magisk类似于xposed框架,能够hook系统函数,AlwaysTrustUserCerts
是该工具的一个插件,能够将用户导入的证书变成系统证书。
在安装好后,进行正常的证书导入操作,证书就能直接导入到系统证书里边,较第一种方式方便许多。
该种方式可以通过recovery将Magisk刷入未root的系统中,可以绕过一些检测了root权限的应用。
0x03 JustTrustMe
在经过上述两种方法后,大部分的app都能抓到包了,但是还是能碰到少数情况仍然抓不到包,应用连不上网的情况。这种情况一般都是ssl pinning的场景。
应用中的代码对ssl证书进行了锁定。一般这种方法的思路就是通过xposed或者frida等hook框架对相应的证书验证代码hook进行绕过。一般app通常采用通用的解决方案,而xposed框架的JustTrustMe模块基本覆盖了这些类型,故本文不再探讨基于frida的自定义hook函数。
安装:
安装方式比较简单,直接下载apk模块文件JustTrustMe,按照通用的apk文件安装方式。然后在Xposed框架中进行激活,然后重启生效。
安装好后,再抓包,应用就能正常运行并抓取https数据包了。
0x04 刷机
在进行上述步骤操作时会碰到一些刷机问题,这里简单记录一下。
BL锁:现在的手机一般有BL锁(BootLoader锁),如果需要刷入第三方recovery或者第三方ROM
FastBoot:线刷时需要进入的模式,通过fastboot命令可以刷入recovery。
fastboot刷入的命令如下:
1 | 查看设备 |
附件是windows版本的fastboot工具:fastboot.exe
TWRP:第三方recovery,相对于官方的recovery增加了很多功能,可通过该recovery进行卡刷升级等。可刷入xposed框架、Magisk框架等
0x05 流量代理
在做了以上操作后仍然有一种情况抓不到流量,就是应用不走配置代理。这种情况的解决思路是需要一个全局的代理工具,如内网渗透用到的proxychains或者proxifier,让所有的流量走统一的代理,然后使用burp抓包。因为默认的burp只能代理http流量,无法代理sock5,所以需要用到一个app工具:drony.apk
通过该工具可以配置代理流量,直接将手机的所有流量全局代理到burp上,这样就能抓包了。
具体使用方法比较简单,可自行搜索查询,不再赘述。