很久没更新文字了,今天来一篇抓包相关的废材文章。
抓包和抓包原理简析
debug抓包调试工具有很多,windows平台上有知名的Fiddler,以及jmeter和今天要介绍的charles,这个名字让我想起了金刚狼里的教授。
http协议没有引入ssl的加密,所以只需要拦截到http底层的tcp请求,分析出报文即可实现抓包。但https因为引入了双向ssl隧道层加密,单纯的引入中间人拦截tcp请求并分析报文是没有什么用的,因为有加密拦截出来的报文也是乱码。所以https的抓包会困难一些,虽如此但并意味着说debug调试对https就无可奈何了。
既然https引入了ssl层加密,但它依然需要与客户端交互加密算法和公钥,基于这个原理那作为抓包工具的中间人伪装成客户端就能解密了,但这还不够,因为中间人伪装成客户端抓到请求之后还需要再次转发给真正的客户端。因为客户端(浏览器、app等)依然是通过https协议发出的请求,所以需要中间人伪装客户端抓取到数据之后仍然需要通过https协议将数据返回给真正的客户端,所以最终抓取拦截https请求的原理就是抓包工具即作为客户端又作为服务端,而且抓包工具作为服务端提供的https服务是需要真正的客户端能信任的。
所以最终要抓https协议的包还得深入了解https的底层基本原理,以及如何配置ssl隧道信任,下面以Charles在ubuntu平台上的使用为例做一个简要教程。
ubuntu上charles安装
以下以charles-proxy-4.2.8_amd64.tar.gz
版本为例进行说明。
1、下载二进制可执行程序
下载地址:https://www.charlesproxy.com/download/
2、安装可执行程序
仅介绍终端中安装和设置方法
## 解压 sudo tar zxvf charles-proxy-4.2.8_amd64.tar.gz ## 执行成功当前目录会生成解压出来的目录charles ## 移动可执行程序 sudo mv charles /opt/charles ## charles加入命令行,使用vim编辑系统环境变量 sudo vim /etc/profile ## 最后一行加入 export PATH=$PATH:/opt/charles/bin ## 关闭vim重载环境变量,某些系统不需要sudo sudo source /etc/profile ## 这样命令行就可以启动charles ##命令行直接输入charles即可打开 ##但还没完,可以设置一个快捷方式 charles ## 复制charles二进制包自带的快捷方式 sudo cp /opt/charlse/etc/charles-proxy.desktop /usr/share/applications/ ## 并赋予可执行权限 sudo chmod +x /usr/share/applications/charles-proxy.desktop
安装完毕有两种启动charles的方法,一种终端中直接输入charles回车启动,另外一种快捷方式图标点击启动。
3、可选激活
无需爆破激活,网上有分享的4.2系列有效的激活码。
## 来源于网络 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4
菜单路径: Help -> Register Charles..
输入激活charles会自动关闭,需要手动重启。
ubuntu端charles配置
1、charles的ssl根证书安装至系统受信任根证书区域
启动完毕在当前用户家目录下会生成1个名为.charles的隐藏目录,如果没有按下方菜单路径点击一下即可生成。
菜单 路径:Help-->SSL Proxying-->Install Charles Root Certificate
在目录~/.charles/ca/
应当可以中找到charles-proxy-ssl-proxying-certificate.cer
和charles-proxy-ssl-proxying-certificate.pem
根证书文件。
终端下对其进行合并转换处理并安装至系统受信任根证书区域。
## 进入隐藏目录 cd ~/.charles/ca ## 使用openssl转换下格式,木有openssl库的先安装 openssl x509 -outform der -in charles-proxy-ssl-proxying-certificate.pem -out charles-proxy-ssl-proxying-certificate.crt ## 执行完毕当前目录会生成charles-proxy-ssl-proxying-certificate.crt ## 新建一个charles的根证书存储路径 sudo mkdir -p /usr/share/ca-certificates/charles ## 移动生成好的根证书至刚新建的存储路径 cp -rf ~/.charles/ca/charles-proxy-ssl-proxying-certificate.crt /usr/share/ca-certificates/charles/ ## 配置系统根证书路径启用charles根证书 sudo vi /etc/ca-certificates.conf ## 最后一行加入如下内容,如果需要注释可以使用井号 charles/charles-proxy-ssl-proxying-certificate.crt ## 最后重新载入系统根证书,使charles根证书生效 sudo update-ca-certificates ## over
2、启用HTTP Proxy
菜单路径:Proxy --> Proxy Setting...
注意此处的HTTP Proxy
的含义是指HTTP代理
,即代理HTTP协议请求,并不是指仅能代理http请求而不能代理https请求。HTTP四个字母都是大写,代表HTTP(协议)代理
这种代理方式!
下方还有更高级的SOCKS Proxy
,一般抓http和httpsHTTP代理
方式就够用了,SOCKS
方式后续再讲。
3、配置待抓取的https目标
以抓https://api.eatojoy.com
为例
菜单路径:Proxy --> SSL Proxy Setting..
待抓包手机端配置
以iphone为例,系统版本10.3.3,其他系统类似处理;确保移动设备与安装charles的电脑处于同一内部网络。
1、查看HTTP代理主机和端口
端口上方设置的是8888,内网IP拿到即可使用。或者charles可以显示,按下方菜单点击弹窗即可看到。
菜单路径: Help-->SSL Proxying-->Install Charles Root Certificate On a Mobile Device Or Remote Broswer
2、手机端HTTP代理配置
菜单路径: 设置 --> 无线局域网-->点击当前网络
3、手机安装charles公钥根证书
手机自带浏览器Safari打开chls.pro/ssl
,页面会自动弹窗提示安装证书。
4、开启charles根证书信任
iOs10以后,安装完根证书还需要手动去启用它,否则https依然抓不了
菜单路径:设置-->通用-->关于本机-->证书信任设置 勾选选中刚安装的charles代理根证书即可
成功抓取https示例
补充:安卓手机可能会因版本、app本身的设置而无法信任抓包证书,这似乎真的无解了。
资料:https://segmentfault.com/a/1190000011573699
哟嚯,本文评论功能关闭啦~