抓包原理(中间人攻击)
目前有很多客户端与服务端通信都采用HTTPS协议,其安全传输协议为SSL/TLS ,用来加密通信数据,防止被篡改。而中间人攻击,通过在客户端和服务端之间建立一个代理服务器,分别对两端传输的数据进行加解密,从而获取数据。而问题的关键点在于,建立的代理服务器需要被两端信任,才能进行连接。
自签名证书
由于 HTTPS 通信中使用的证书是由受信任的第三方机构颁发的,如果使用自签名证书则会出现证书不受信任的问题。在安卓7.0版本以上,安装的BurpSuite自签名证书都会安装在用户证书中,因此默认情况下,使用 BurpSuite 进行 HTTPS 抓包时,客户端会提示证书不受信任的错误。
为了解决证书不受信任的问题,BurpSuite 提供了一种将自签名证书安装到手机系统根目录的方法,从而使得手机系统信任 BurpSuite 的自签名证书。这样,在手机使用 BurpSuite 代理时,HTTPS 流量会被 Fiddler 拦截并使用安装的证书进行解密,从而实现 HTTPS 抓包。
教程步骤
前提条件:
- Android版本 > 7.0 (小于7的直接在手机上安装即可)
- Root
一、下载BurpSuite证书到电脑上
- 打开BurpSuite,找到当前电脑的IP,如“192.168.1.18”。
- 打开浏览器,输入“192.168.1.18:8888”。(“8888”端口号是默认端口号)
- 点击CA Certificate下载证书,cacert.der。
二、修改证书格式,安卓常用pem格式的证书
Linux、Mac系统自带openssl,执行以下openssl命令,将cer格式转为pem
openssl x509 -inform DER -in cacert.der -out cacert.pem
三、修改证书名称为哈希值.0
生成一个类似9a5ba575.0的文件。
mv cacert.pem `openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1`'.0'
四、将证书导入到手机,完成!
注意为root权限!
adb shell
su
mount -o rw,remount /system
adb push "你的9a5ba575.0的文件地址" /system/etc/security/cacerts
chmod 644 9a5ba575.0