一.信任用户证书
安卓7.0及以上系统对于证书的安全策略做了修改,用户证书只能用于代理浏览器的流量,而应用是不会信任这些证书。【ios和安卓<7.0的版本没有此问题】
解决方案:
1、root手机将证书导入到根证书目录下
2、换低版本安卓系统
操作流程:
1.下载Burp证书。
文件名为cacert.der
2.使用openssl将DER转换成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
3.将cacert.pem的名字更改为刚才输出的hash.0
4.将证书复制到设备
先拷贝到sdcard,然后再mv到存放根证书的目录
adb push 9a5ba575.0 /sdcard/tmp/9a5ba575.0
mount -o rw,remount / 挂载,使sdcard目录可读写
mv /sdcard/tmp/9a5ba575.0 /system/etc/security/cacerts/9a5ba575.0 移动
cd /system/etc/security/cacerts
chmod 644 9a5ba575.0 更改权限
5.reboot重启设备即可
以上操作就可以让应用也信任burp证书。
然后burp就可以抓取到应用的数据包。
二.抓包
1.单向证书校验
客户端并不会默认信任系统根证书目录中的证书,而是在代码里再加一层校验,这就是证书绑定机制——SSL pinning,如果这段代码的校验过不了,那么客户端还是会报证书错误。
(1)HTTPS单向认证
在单向认证的实现上,占据主动性的还是客户端,因为只要客户端认可了server发来的签名和认证(CA证书),然后直接告诉服务器我们下次使用什么秘钥进行通讯就行了。单向认证是在客户端上验证的。
(2)绕过单向证书校验进行反抓包
可以利用SSL-Pinning的技术来进行反抓包。中间人攻击的要点是伪造了一个假的服务器证书,让客户端信以为真,那么我在客户端内置了一个server的证书,两者进行比较一下就知道是不是真的了。
工具:justTrustme.apk或者xpose的justTrustme模块
安装justTrustme.apk之后,需要配合xposed去使用。在xposed中勾选该模块。
点击模块
然后勾选justTrustme模块。
2.双向证书校验
双向认证是客户端不仅认证服务端的证书,服务端也要验证客户端的证书
(1)HTTPS双向认证
(2)绕过双向证书校验进行反抓包
逆向APK找到证书文件,找到证书密码。
突破思路:一般在app/assert、或者raw,搜索.p12或者.pks,直接逆向APK,找到对应加载证书和密码的地方,将其密码打印出来。
三.VPN抓包
有些APP或者小程序直接使用burp抓包时是抓不到包的,我们可以通过设置全局代理的方式来抓包。
1.Postern
使用postern进行全局代理,使得所有流量到postern,然后让postern将流量再转发到burp。
步骤:
我使用的是mumu模拟器,首先安装postern.apk。
打开postern软件,配置代理。
服务器地址选择主机ip,端口输入8080(可更改),代理类型选择HTTPS/HTTP CONNECT。点击保存。
然后配置代理规则,如下图所示。保存。
点击下图所示打开VPN,此时模拟器的所有http/https数据都会提交到burp上去。
打开burp,配置监听。配置的监听为刚才postern的代理服务器地址,端口对应一致。
此时在模拟器上打开软件,就可以抓包数据包。
2.proxydroid
https://github.com/madeye/proxydroid
该工具与postern的用法一致。
设置主机,端口与协议,
然后打开全局代理。
burp配置同上。然后访问百度抓包。
3.Drony
https://apps.evozi.com/apk-downloader/?id=org.sandroproxy.drony
与上述两个软件功能类似,不过软件的语言为繁体。
左滑到设置,选择无线网络,因为我模拟器连接的无线网络。
进行配置。
代理类型选择普通。
该软件也可以自定义代理指定的软件。
设置好之后,打开代理功能。
然后即可抓取到模拟器上的数据包。