mitmproxy 入门指南

Sep 25, 2022 • 预计阅读时间 3 分钟

mitmproxy 是开源的免费的 HTTP 抓包工具。

安装 mitmproxy

下载:mitmproxy-8.1.1-osx.tar.gz

解压得到三个核心程序:mitmproxy, mitmdump, mitmweb

$ tar xvf ./mitmproxy-8.1.1-osx.tar.gz
x mitmproxy
x mitmdump
x mitmweb

在 macOS 上需要先移除额外的属性,否则执行的时候会触发看门狗询问是否允许执行的提示。

xattr -c *

然后把几个核心程序移到 PATH 路径下:

sudo mv mitm* /usr/local/bin

配置 mitmproxy

运行 mitmproxy,默认监听的端口是 8080,也可以使用参数指定:

mitmproxy -p 9091 # 监听 9091 端口

想要交互友好一点,可以使用带 WebUI 的 mitmweb

mitmweb -p 9091

命令执行后会默认打开 Web 控制页面。

配置根证书解密 HTTPS

把本机的代理设置为 127.0.0.1:9091 ,然后在浏览器中打开地址:http://mitm.it

点击安装 mitmproxy-ca-cert.pem 到系统的钥匙链中,然后设置信任为始终信任。

现在本机的代理服务器就具备解包 HTTPS 流量的条件了。

最后一步,在终端里设置代理地址为 mitmproxy 服务器的 IP 和端口,在终端有浏览器中打开 http://mitm.it

下载 mitmproxy-ca-cert.pem 并信任。

现在可以开始抓包了。

在 Debian 上部署 mitmproxy 服务

如果有树莓派设备,可以选择把 mitmproxy 服务安装在树莓派上,这样每次抓包的时候只需要启动服务就可以了,一次配置多次使用。

安装 mitmproxy:

sudo apt install mitmproxy

默认情况下,mitmweb 的控制页面默认只监听 127.0.0.1 ,需要改为 0.0.0.0 或者树莓派的 IP 地址:

# 控制绑定 IP 为 0.0.0.0,访问端口默认是 8081
# 代理服务的端口为 9091
mitmweb --web-host 0.0.0.0 --listen-port 9091

首次执行命令后,会在 ~/.mitmproxy 目录下生成证书,要解包 HTTPS 需要先把根证书安装到系统中:

$ sudo cp -a ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
$ sudo update-ca-certificates

Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

设置代理链

如果机器上已经存在了其他的代理服务器,就需要把 mitmproxy 服务设置为上游代理模式,这样数据先经过 mitmproxy 后,再由 mitmproxy 转发给上游代理服务。

client <-> mitmproxy <-> upstream proxy <-> Internet

设置代理模式:

mitmweb --mode upstream:http://127.0.0.1:7890 --web-host 0.0.0.0 --listen-port 9091

官方文档: https://docs.mitmproxy.org/stable/concepts-modes/

在 Docker 中使用 mitmproxy

安装 mitmproxy 官方编译的 Docker 镜像:

sudo docker pull mitmproxy/mitmproxy

运行 mitmproxy 服务:

sudo docker run --rm -it \
    -v ~/.mitmproxy:/home/mitmproxy/.mitmproxy \
    -p 9090:8080 -p 9091:8081 \
    mitmproxy/mitmproxy \
    mitmweb --no-web-open-browser --web-host 0.0.0.0 --mode upstream:http://10.211.55.2:7890

把 Docker 里的端口 80808081 映射到主机的 90909091 端口上,并且需要设置 Web 控制页面绑定的 IP 为 0.0.0.0,主机才可以访问到。

如果主机上还设置了代理,需要添加 upstream 把数据转发给主机上的代理服务器。

如果是团队小组内部共用一个 mitmproxy 服务器的话,使用 Docker 比较合适,可以为每个登录的成员启动一个 Docker 实例来避免环境干扰。

iOS 模拟器安装 mitmproxy 根证书

和真机有所不同,模拟器安装根证书比较简单,只需要一条命令。

首先启动一个 iOS 模拟器,然后执行命令把根证书添加到模拟器中:

xcrun simctl keychain booted add-root-cert ~/.mitmproxy/mitmproxy-ca-cert.pem

命令执行成功后,需要重启一下模拟器。

调整 TLS 版本需求

如果要限制客户端的 TLS 版本最低为 1.1,需要在命令行中加上参数:

--set tls_version_client_min=TLS1_1

参考资料: https://docs.mitmproxy.org/stable/concepts-certificates/

mitmproxy
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

Windows 11 安装 Microsoft Store

bitcode 被废弃了