教程参考
使用场景
mitmproxy 是一个功能强大的中间人代理工具,它允许你拦截、查看和修改客户端和服务器之间的流量。其透明代理模式使得 mitmproxy 在特定场景中非常有用,尤其是在需要对网络流量进行分析或测试时,而无需更改目标设备上的任何设置。
- 无需配置代理:与 Burp Suite 不同的是,mitmproxy 在透明模式下工作时不需要在目标机器上手动设置 HTTP 或 HTTPS 代理。这意味着最终用户或测试对象不会察觉到代理的存在,减少了人为干预的可能性。
- 安装证书:尽管在透明模式下不需要配置代理,但为了拦截和解密 HTTPS 流量,仍然需要在目标机器上安装 mitmproxy 的根证书。这一点与 Burp Suite 类似,因为两者都需要处理 SSL/TLS 握手来查看加密流量。
- 通过 MitmWeb,可以在本机查看抓取的包,使用方式上跟 Burp 没有多大差异。

常用命令
替换资源
mitmproxy --mode reverse:http://xxxx:8888/ -p 8888 -k --map-remote "|https://xxxx:9201|- http://10.100.15.44:8888
替换正文body
mitmproxy --mode reverse:http://xxxx:2881/ -p 2881 -k \
--modify-body '/13883797080/13866667080' \
--modify-body '/17784081010/17766661010' \
--modify-body '/13983240380/13966660380'

网关机器
kali
192.168.1.12

网络配置
内核转发
# 开启内核路由转发
sysctl -w net.ipv4.ip_forward=1
使用上述任何一种方法都不会使更改持久。为了确保新设置在重新启动后仍然有效,您需要编辑 /etc/sysctl.conf 文件。
vim /etc/sysctl.conf
将以下行之一添加到文件底部,具体取决于您想要关闭还是打开 Linux IP 转发。然后,保存对此文件的更改。该设置在重新启动后将是永久的。
net.ipv4.ip_forward = 0
OR
net.ipv4.ip_forward = 1
编辑文件后,您可以运行以下命令以使更改立即生效。
sysctl -p
iptables转发
只转发80/443的流量
# 重定向所有到达 80 和 443 端口的 TCP 流量到 mitmproxy 的端口(假设 mitmproxy 在 8080 端口运行)
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 8080
转发特定IP的流量
iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.1.112 -j REDIRECT --to-port 8080
check iptables rules确认下规则
iptables -t nat -L -n -v=
mitm录制
mitmweb -p 8080 --listen-host 0.0.0.0 --web-port 88 --web-host 0.0.0.0 --mode transparent --showhost
- 在web端左上角file,可以保存为flows文件以便下次使用
mitm服务器端重放
模拟一个Server端,重放刚刚的请求
mitmproxy的另一个强大功能是重放以前的流量。支持服务器端重播:mitmproxy重播与较早记录的请求匹配的请求的服务器响应。
<font style="color:rgb(74, 74, 74);">--server-replay</font>选项使我们可以从保存的HTTP对话中重播服务器响应。
- 为此,我们使用一组启发式方法将传入请求与保存的响应进行匹配。
- 默认情况下,当将传入请求与重放文件中的响应进行匹配时,我们将排除请求头,并且仅使用URL和请求方法进行匹配,这在大多数情况下都有效,并且可以在请求头自然会变化的情况下重放服务器响应,例如使用不同的用户代理。
itmweb -p 8080 --listen-host 0.0.0.0 --web-port 88 --web-host 0.0.0.0 --mode transparent --showhost \
--server-replay-refresh \
--server-replay-nopop \
--server-replay-kill-extra \
--set server_replay_ignore_content=true \
--server-replay ./PrivateServer-Mock-2.flows
选项解释
Server Replay:
| -server-replay PATH, -S PATH | 从保存的文件重播服务器响应。可多次通过。 |
|---|---|
| ** –server-replay-kill-extra** ** –no-server-replay-kill-extra** | 在重放期间,如果没有找到可重放的响应,那么杀死额外的请求 |
| ** –server-replay-nopop** –no-server-replay-nopop | 在重放某个响应后,不从服务器删除这个流,如果你需要多次重放相同的响应需要打开。 这对选项的含义有点绕,双重否定。 |
| ** –server-replay-refresh** –no-server-replay-refresh | 在重放期间,自动调整响应中的日期, expires和last-modified标头,以及调整cookie到期时间 |
| –set server_replay_ignore_content=true | 设置server_replay_ignore_content,不把body作为重放的依据——只看Http方法+URL后记:我是怎么知道有这个选项的呢? + `mitmweb –options |
目标设备
安装证书
在需要抓包的设备上配置网关,访问 http://mitm.it/ 安装证书文件并信任
- 更改默认网关:
打开“网络和共享中心”。
点击“更改适配器设置”。
右键点击您正在使用的网络适配器,选择“属性”。
双击“Internet 协议版本 4 (TCP/IPv4)”。
选择“使用下面的 IP 地址”并填写相应的 IP 信息。在“默认网关”字段中,输入您的 Kali Linux 机器的 IP 地址。
- 安装 mitmproxy 证书:
从 mitmproxy 获取根证书。通常,您可以从 http://mitm.it 访问并下载证书。
在 Windows 上安装证书:双击证书文件,选择“安装证书”,然后按照提示进行安装。
完成以上步骤后,您的 Windows 机器上的所有 HTTP 和 HTTPS 流量将通过 Kali Linux 上的 mitmproxy 进行转发和分析。记得在完成抓包分析后,将 Windows 的网络设置恢复到原始状态。

