逆转!MitmProxy + WireGuard 中间人代理抓包
第 1 节 概述
WireGuard 可以创建点对点连接,让客户端在外网访问Nas的内网应用,那么我们把思路逆转过来,Nas 的内网当然也可以获取客户端的访问流量。
本文主要介绍如何通过 MitmProxy 配合WireGuard 抓取客户端的访问流量,并以解析某考试App为例,说明如何使用 python 程序解析流量,并修改返回结果。
第 2 节 MitmProxy
MitmProxy 是一个开源的中间人代理(Man-in-the-Middle Proxy),用于 HTTP 和 HTTPS 流量的捕获、修改和分析。它允许开发者、测试人员或安全专家查看、修改并调试客户端与服务器之间的通信。常见的用途包括:
- 流量拦截和分析:可以监控和分析通过代理的 HTTP/HTTPS 请求和响应。
- 修改流量:实时修改请求或响应内容,例如修改响应的 JSON 数据,或者拦截请求以模拟不同的条件。
- 调试和测试:对 API 请求和 Web 应用进行调试,捕捉和测试不同的网络请求。
- SSL/TLS解密:MitmProxy 能通过生成自己的 SSL 证书来解密 HTTPS 流量,提供清晰的内容查看。
它支持命令行界面(CLI)、Web界面和 Python 脚本接口,可以高度自定义操作和扩展功能。
当然,也有一些功能比较类似的软件,比如 BurpSuite、Fiddler、TcpDump 等。
- BurpSuite 和 Fiddler 桌面端更为常见,很少在 Docker 上面部署
- TcpDump 在Linux 更为常见,可以在 Docker 上面部署,但是不支持 SSL/TLS 解密,所以获取到的数据包都是加密的
MitmProxy 这一类的软件直接部署在公网上面其实并不安全,因为其他人也可以通过 MitmProxy 发送流量来攻击设备,所以将 MitmProxy 和 WireGuard 配合使用,部署在内网中是比较合适的。
MitmProxy 原生就支持 WireGuard 模式,并且已经实现了对 WireGuard 协议流量的解析,部署起来相当方便。
2.1 部署 Docker 镜像
|
|
MitmProxy 有三种工具,详见网页,我这里使用了 mitmweb,使用mitweb时,需要映射8081端口用来访问 Web 界面。
mitmproxy(命令行模式)提供了一个交互式的命令行界面(CLI)。它允许用户实时查看、修改、重放 HTTP/HTTPS 流量。mitmweb(Web 界面模式)Web 界面版本,提供了一个基于浏览器的图形化界面来查看和修改流量。mitmdump(批量模式)类似于 TcpDump,它以非交互式方式捕获和处理流量,并将数据输出到命令行或保存到文件中。
MitmProxy 有几种运行模式,详见网页,我这里使用的是 WireGuard 模式,使用该模式时,需要映射51820/udp端口用来代理,并且映射的端口要能够公网访问。使用其他模式时,使用的是8080端口作为代理。
在此模式下,MitmProxy 运行内部 WireGuard 服务器,设备可以使用标准 WireGuard 客户端应用程序连接到该服务器。
这里的main.py是需要自己编写的,详见下文。
2.2 连接到服务器
使用浏览器访问mitmweb界面,可以在Capture页面找到二维码,扫码即可添加连接

在容器的/home/mitmproxy/.mitmproxy文件夹下也能找到wireguard.conf记录了客户端的公钥和私钥,已经在构建容器时映射到外部了。
2.3 安装证书
手机连接 MitmProxy 服务器后访问页面,选择合适的证书下载并安装
|
|
通用 -> VPN与设备管理 -> mitmproxy
通用 -> 关于本机 -> 证书信任设置 -> 针对根证书启用完全信任

2.4 编写处理程序
以实现解析某考试 App 为例,讲述如何编写程序,我们的目标是获取到该 App 返回的题目数据,并且把正确的选项内容改成选我,错误的选项内容改成-
获取数据格式
先获取数据格式,可以看到,返回的数据是 Json 格式

分析数据,选项主要存储在OPTION_CONTENT和QUESTION_OPTIONS_CONTENT
编写程序
随着不断使用,解析程序会越来越多,为了保证可扩展性,使用addons来编写程序
编写exam.py
|
|
扩充main.py
|
|
运行结果


正确答案一目了然,轻松获得了 100 分。