赞
踩
对于双向加密的HTTPS,正常情况下,即使能以中间人的方式拿到通信报文,但是因为没有密钥,同样也不能看到具体的传输内容。基于HTTPS加密通信的建立过程,和密钥交换方式,如果在加密通信建立之前,截取服务端发送的包含证书的报文,伪装成服务端(从第一个SSL/TLS包截取域名,利用内置的ca证书创建公钥证书和私钥),把自己的证书发给客户端,然后拿到客户端返回的包含对称加密通信密钥的报文,以服务端自己的公钥加密后发给服务端,这样一来,双向加密通信建立完成,而中间人实际拿到了通信的密钥,所以可以查看、修改HTTPS的通信报文,这就是典型的Man-in-the-middle attack即MITM中间人攻击。
简化理解:
总结:
常用抓包工具之一,部署安装步骤见扩展,安卓6以下可直接抓包,6以上按此方法
获取fiddler ca证书:
fiddler默认抓http,选择Tools->Options,
部署 MITM 代理服务器:在电脑上启动 Charles,默认会在这台电脑的 8888 端口部署 Charles 的 Web 服务器
通过代理等方式将网络流量归集到 MITM 主机:在电脑命令行执行 ipconfig 获得本地 IP 地址(也可以通过 Charles 的 Help→Local Ip Address
查看),然后将手机和电脑连接到同一个局域网下,再修改手机连接 Wifi 的高级设置,设置代理到电脑的 IP 地址和 8888 端口号
客户端信任 MITM CA 证书: Charles 抓包也需要在手机上信任 Charles CA 证书。根据指引,会让你在手机浏览器访问 chls.pro/ssl
下载证书,安装证书的方法与 Fiddler 相同
报文重放:在 Charles 上重放请求很简单,有两种方式:右键点击一个请求,选择 Repeat
或 Repeat Advanced
直接重放;或者选择 Compose
先编辑再重放。其中 Repeat Advanced 适合做压力测试。
弱网模拟:
打开 Proxy→Throttle Settings
进入弱网配置页面,其中 Throttle preset
提供了多种预置的网络环境模拟配置,可以直接在此基础上修改。
修改请求:
Charles 本身是一个代理服务器,可以拦截 HTTP 请求 / 响应进行修改后再放行。在 Charles 上配置 Rewrite:tools里面
Android 7以上对安装证书限制:
安卓7以前信任系统证书和用户证书,7以后只信任系统证书,解决方法
修改App的AndroidManifest网络安全配置,信任用户自导入证书(基本上用于自己开发的app)。
AndroidManifest 中配置 networkSecurityConfig
网络安全配置详情:https://developer.android.com/training/articles/security-config
Root测试机或自编译系统,把Fiddler根证书设置为系统预置证书。
调低targetSdkVersion:
安卓7以上可以抓到targetSdkVersion<24的包,Google后来要求大于28了,所以可以找历史版本
平行空间抓包:
利用宿主系统运行其他应用,但要注意平行空间的版本 4.0.8625 以下才是 targetSdkVersion < 24
安卓版本:
可使用夜神模拟器,选择多版本安卓os
连不上代理:
Fiddler代理没有勾选Allow remote computers to connect
代理服务器地址不对,eg写错误成了127.0.0.1
模拟器网络设置没设对(夜神模拟器为例,网络设置不要选择桥接)
移动系统证书提示只读(由于没有设备,此处未经实践lol):
安卓设备请确保root
连接安卓设备,确保安卓设备打开了“usb调试”选项,然后打开终端,输入adb shell,进入后输入 su,以root权限调试
执行mount | grep /system,会看到如下信息
/dev/block/platform/1021c000.rksdmmc/by-name/system /system ext4 ro,noatime,nodiratime,noauto_da_alloc,data=ordered 0 0
ro说明只读
输入命令cat /proc/mounts
找到/system的路径:/dev/block/platform/1021c000.rksdmmc/by-name/system
执行命令 mount -o rw,remount /dev/block/platform/1021c000.rksdmmc/by-name/system /system
app提示网络错误:
可能是app使用了证书固定,Client 端内置 Server 端真正的公钥证书。在 HTTPS 请求时,Server 端发给客户端的公钥证书必须与 Client 端内置的公钥证书一致,请求才会成功。比如饿了么,比较麻烦,但Xposed 和 Magisk 都有相应的模块,用来破解证书固定,还是能抓。破解的原理大致是,Hook 创建 SSLContext 等涉及 TrustManager 相关的方法,将固定的证书移除。
https抓包原理:
http为明文报文,可以直接食用,但https为双向加密报文,需要破解,
CA证书:
分为用户证书和系统证书,
fiddler部署:
下载地址:https://www.telerik.com/fiddler,注意安装经典版本。
fiddler有断点功能,也可以实现注入,可以打在request之前和response之后
fiddler使用过程中忽然不能联网了:重启fiddler
原因:fiddler异常关闭,Fiddler是以代理WEB服务器的形式工作的,它默认使用代理地址:127.0.0.1, 端口:8888。 当Fiddler开启时会自动设置代理, 退出的时候它会自动注销代理,这样就不会影响别的程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法是重新启动下Fiddler。
双向认证问题:
比如soul,server也会校验client,双向认证需要server支持,请求建立前server会向client请求公钥(不同于比如前面的固定证书公钥,也就是说同一个app可能存在多个公钥和秘钥),一般会将公钥存在包中,可以从包中提取,相关文章较多,不同app存放位置一般也不同,需要具体情况具体分析,这里就不细展开了,针对app找相关资料,还是可以抓的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。