第十一课、抓包环境安装与HTTPS.C/S校验原理
第十一课、抓包环境安装与HTTPS.C/S校验原理[*]https://mp.weixin.qq.com/s/ahPbBSfkkBsv4oy265rI2Q
Charles设置
[*]我们首先要把Charles当做一个SOCKS5的代理服务器,所以要先设置SOCKS5代理服务器。打开Proxy设置选项,开启SOCKS服务器,我这里开启的端口为8889,也可以随意填写。
[*]https://img-pool-own.oss-cn-shanghai.aliyuncs.com/img/image-20230219154633508.png
Burp Suite设置在Proxy中的options选项中设置Web代理端口,设置完成后,点击确定。https://img-pool-own.oss-cn-shanghai.aliyuncs.com/img/image-20230219154924599.pngPostern设置在手机上打开Postern应用,设置SOCKS5代理服务器的地址,连接到Chalres服务器,让所有的数据包都通过Chalres的SOCKS5服务器,这样就能保证数据包不会丢失。https://mmbiz.qpic.cn/mmbiz_png/PicDhHpwdzia8FK0tNib8kSZPaelec3HrEsAFz1yakv2AEE6G2FjFbyXiazEKibrtQUT1h9do6clsOf69m26tHcGfaw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1vpn规则设置:我这里设置为所有地址都需要走SOCKS5代理服务器。
[*]多了一个ip在网络层抓包不是应用层
[*]ip route showtable 0 |grep default查看路由表
虚拟机设置https://img-pool-own.oss-cn-shanghai.aliyuncs.com/img/image-20230219155359972.pnghttps://img-pool-own.oss-cn-shanghai.aliyuncs.com/img/image-20230219155425415.pnghttps://img-pool-own.oss-cn-shanghai.aliyuncs.com/img/image-20230219155528178.png
[*]路由器新分配ip到虚拟机
[*]本机ping手机
[*]https://img-pool-own.oss-cn-shanghai.aliyuncs.com/img/image-20230219155931414.png
[*]保证了手机、虚拟机、本机的ip在同一个网段
[*]安卓7开始要把证书放在根目录
HTTPS原理部分
[*]HTTP(80) + 加密 + 认证 + 完整性保护=HTTPS(443)
[*]查看远程端口
[*]找到PIDps -e |grep chrom
[*]查看端口lsof -p 8803 |grep TCP
[*]https 使用多重混合加密
https://img-pool-own.oss-cn-shanghai.aliyuncs.com/img/image-20230219171443121.png配置charles证书到根目录cd /data/misc/user/0/cacerts-added/mount -o remount,rw /systemcp * /etc/security/cacerts/systemmount -o remount,ro /Https服务器校验客户端
[*]在服务器上部署对app内置证书的校验代码。
[*]单一通信已经分裂成两个互相独立的通信,这时候与服务器进行通信的已经不是app、而是Charles了,所以我们要将app中内置的证书导入到Charles中去。
[*]这个操作通常需要完成两项内容:
[*]找到证书文件
[*]找到证书密码
[*]找到证书文件很简单,一般apk进行解包,直接过滤搜索后缀名为p12的文件即可,一般常用的命令为tree -NCfhl |grep -i p12,直接打印出p12文件的路径,当然也有一些app比较“狡猾”,比如我们通过搜索p12没有搜到证书,然后看jadx反编译的源码得出它将证书伪装成border_ks_19文件,我们找到这个文件用file命令查看果然不是后缀名所显示的png格式,将其改成p12的后缀名尝试打开时要求输入密码
[*]想要拿到密码也很简单,一般在jadx反编译的代码中或者so库拖进IDA后可以看到硬编码的明文;也可以使用下面这一段脚本,直接打印出来,终于到了Frida派上用场的时候。
[*]function hook_KeyStore_load() {
Java.perform(function () {
var StringClass = Java.use("java.lang.String");
var KeyStore = Java.use("java.security.KeyStore");
KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementation = function (arg0) {
console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
console.log("KeyStore.load1:", arg0);
this.load(arg0);
};
KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (arg0, arg1) {
console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
console.log("KeyStore.load2:", arg0, arg1 ? StringClass.$new(arg1) : null);
this.load(arg0, arg1);
};
console.log("hook_KeyStore_load...");
});
}
setImmediate(hook_KeyStore_load)
[*]有了证书和密码之后,就可以将其导入到抓包软件中,在Charles中是位于Proxy→SSL Proxy Settings→Client Certificates→Add添加新的证书,输入指定的域名或IP使用指定的证书即可
[*]https://img-pool-own.oss-cn-shanghai.aliyuncs.com/img/t01efedec209fa391de.jpg
[*]
谢谢大神分享! 向楼主学习
页:
[1]