HTTPS流量由于加密不能通过常规工具wireshark和tcpdump查看,本文介绍使用mitmproxy达成目标。
一、mitmproxy工作原理
mitmproxy作为中间人代理工具,通过客户端 <-> mitmproxy代理 <-> 目标服务器工作模式,强制介入HTTPS流量,从而实现“解密查看”、“篡改”、“拦截”等目标。
完整的工作流程如下:
- 开启mitmproxy代理,其是一个HTTP代理端点
- 客户端信任mitmproxy自签根CA证书
- 客户端配置使用mitmproxy代理
- 客户端发起HTTP/HTTPS请求
- mitmproxy代理与目标服务器建立连接:
- mitmproxy代理向服务器请求证书
- 验证通过服务器证书合法性
- mitmproxy代理与服务器建立连接
- 客户端与mitmproxy代理建立连接:
- 客户端向mitmproxy代理请求证书
- mitmproxy代理拿到目标服务器域名,动态伪造一张同域名证书,然后用mitmproxy自签根CA证书,给伪造证书签名
- 由于第2步——客户端信任mitmproxy自签根CA证书,此时客户端验证通过mitmproxy代理返回的伪造证书
- 客户端与mitmproxy代理建立连接
- mitmproxy代理与目标服务器建立连接:
至此,已建立数据通信过程:客户端发数据 -> 加密发给mitmproxy代理 -> mitmproxy代理解密成明文(可进行“查看”,“篡改”,“拦截”等动作) -> mitmproxy代理再加密发给目标服务器 -> 目标服务器回复数据 -> 加密发给mitmproxy代理 -> mitmproxy代理解密成明文(可进行“查看”,“篡改”,“拦截”等动作) -> mitmproxy代理再加密回复给客户端。
二、Ubuntu 24.04下使用mitmproxy获取FlClash软件请求订阅地址的格式
背景:Ubuntu 24.04下软件FlClash,其内会请求订阅地址获取最新服务节点,想要获取请求订阅地址的格式。
使用mitmproxy代理实现以上目标,完整流程如下:
- 执行
apt-get install mitmproxy命令安装mitmproxy - 执行
mitmproxy命令开启mitmproxy代理,其是一个HTTP代理端点,默认代理地址为127.0.0.1:8080 - FlClash客户端信任mitmproxy自签根CA证书(路径为
~/.mitmproxy/mitmproxy-ca-cert.pem):不似浏览器可进行仅自身级别的信任,故直接进行系统级信任,具体步骤如下:- 复制自签根CA证书:
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/ - 刷新
/etc/ssl/certs目录并重建合并证书包ca-certificates.crt:sudo update-ca-certificates
- 复制自签根CA证书:
- FlClash配置代理:不支持读取
HTTP_PROXY,HTTPS_PROXY环境变量配置代理方式,故使用proxychains FlClash方式(ProxyChains配置HTTP代理http 127.0.0.1 8080) - FlClash软件内触发请求订阅地址
- 在mitmproxy界面可以查看到以下信息而达成目标
1 | Request Response Detail |