☰
mitm_relay SSL拦截指南:如何轻松中间人 IMAP、SMTP、XMPP 等 STARTTLS 加密通道
2026/9/26 1:38:37 网站建设 项目流程

mitm_relay SSL拦截指南:如何轻松中间人 IMAP、SMTP、XMPP 等 STARTTLS 加密通道

【免费下载链接】mitm_relayHackish way to intercept and modify non-HTTP protocols through Burp & others.项目地址: https://gitcode.com/gh_mirrors/mi/mitm_relay

mitm_relay 是一款开源的 SSL 拦截中间人工具,借助 Burp Suite 等现成的流量代理,就能轻松对 IMAP、SMTP、XMPP、IRC 等非 HTTP 协议进行 STARTTLS 加密通道的拦截与篡改,TCP/UDP 均支持,特别适合厚客户端(Thick Client)安全评估场景,免去了为冷门协议搭建专用环境的麻烦。

什么是 mitm_relay?🤔

主流的抓包/代理工具大多只擅长 HTTP 世界。而邮件、即时通讯、数据库、甚至 SSH 这类"古怪"协议,往往让安全测试者头疼。mitm_relay 的思路非常巧妙(作者称之为 "hackish"):

  • 借鸡生蛋:把每一段客户端请求和服务器响应,打包进一个 HTTP POST 请求体里,经由你现有的拦截代理(如 Burp Proxy)转发给一个本地"回声"Web 服务器再原样取回;
  • 协议无关:因此 Burp 里看到的 HTTP 头无意义,但代理的拦截、查看、Match and Replace 修改规则对原始协议数据完全生效;
  • 完全异步:服务器连续分片发送响应也不会出错;
  • 支持 SSL/STARTTLS:自动检测 TLS 握手(\x16\x03魔数)并在中间插入 TLS 包装,因此 IMAP、SMTP、XMPP、IRC 的 STARTTLS 升级通道可以被解密。

在代理中,客户端发来的数据会出现在 URL 含CLIENT_REQUEST的请求里,服务器回的数据则出现在SERVER_RESPONSE请求中。💡

注意:Burp 的 Repeater、Intruder、Scanner 在此场景下没有意义——它们实际打到的只是那个"回声"服务器。

快速安装与运行

克隆项目并查看帮助:

git clone https://gitcode.com/gh_mirrors/mi/mitm_relay cd mitm_relay python3 mitm_relay.py --help

核心参数一览(源码见 mitm_relay.py):

参数作用
-r <relay>定义中继,格式[udp:\|tcp:]本地端口:目标主机:目标端口,可重复指定多个
-p <proxy>转发到哪个代理(如127.0.0.1:8080);省略则进入纯监控模式,流量只打印到控制台
-c / -kSSL/STARTTLS 拦截所需的服务器证书与私钥文件
-cc / -ck连接真实服务器时使用的客户端证书与私钥
-s <script>自定义 Python 脚本(handle_request/handle_response),在转发到代理前修改流量
-tSocket 接收超时,默认 120 秒

SSL 拦截配置:三步搞定 STARTTLS 通道 🔐

第一步:生成证书

项目自带 gen_certs.sh 脚本,一键生成自签名证书(10 年有效期):

sh gen_certs.sh

脚本会在cert/目录下生成server.pem与private.key,默认 CN 为*.acmecorp.com。⚠️关键细节:很多客户端会校验证书 CommonName!请务必将 CN 改为客户端实际连接的服务器域名(可从真实服务器证书中获取),否则 STARTTLS 拦截会失败。

如果客户端执行严格的证书校验,可以把 Burp 的 CA 导入到客户端信任库,再用该 CA 签发一张可信服务器证书(完整命令见 README.md 的 Certificates 章节),前提是客户端未做证书绑定(Certificate Pinning)。

第二步:让客户端把流量发给你

最简单的方式:查清客户端要解析的 DNS 地址,在 hosts 文件中把它指向运行 mitm_relay 的机器,并让 mitm_relay监听与目标服务器相同的端口。若客户端写死了 IP 地址,可在宿主机用 iptables DNAT 规则把流量重定向到中继端口(README 中有完整示例)。

第三步:启动中间人

以拦截 IMAP(143 端口)的 STARTTLS 会话为例:

python3 mitm_relay.py -r 143:mail.example.com:143 \ -p 127.0.0.1:8080 \ -c cert/server.pem -k cert/private.key

同样方式替换端口即可拦截 SMTP(25/587)、XMPP(5222/5223)等。UDP 协议只需加上前缀,如-r udp:53:dns.example.com:53(注意 UDP 场景建议绑定局域网 IP 而非 127.0.0.1)。

启动后,每次客户端与服务器之间的 TLS 握手都会自动被工具"拆开"重新封装,明文数据随即可在 Burp 中逐条查看和篡改。✅

实战技巧:用 Python 脚本自动改包 ✍️

除了手动在 Burp 里点拦截,还可以用-s参数挂一个 Python 脚本,在流量进入代理之前就完成修改。示例脚本 sample_script.py 演示了两个钩子:

def handle_request(client_request): # 客户端 -> 服务器 的流量 modified = client_request.replace(b'original', b'modified') return modified def handle_response(server_response): # 服务器 -> 客户端 的流量 return server_response

官方 README 中给了一个经典用法——关闭 Gmail IMAP 会话的压缩,把COMPRESS=DEFLATE替换为COMPRESS=NONE,从而在 Burp 里看到明文的邮箱交互内容:

python3 mitm_relay.py -r 143:imap.gmail.com:143 -p 127.0.0.1:8080 \ -c cert/server.pem -k cert/private.key -s disable_compress.py

脚本的典型应用场景:

  • 修改协议中记录"字段长度"的头部(改了消息体就要同步改长度字段,否则会话会损坏);
  • 对协议特定部分做模糊测试(Fuzzing);
  • 反序列化对象、做修改、再重新序列化;
  • 纯监控:把用户名、密码等敏感字段记录到文件。

只看不改:监控模式 📡

不指定-p代理时,mitm_relay 退化为纯监控模式:所有流量以彩色高亮打印到控制台(ASCII 直接解码,二进制则输出 hexdump),客户端/服务器 IP、时间戳、数据长度一目了然,适合快速摸清一个陌生协议的行为。

注意事项 ⚠️

  • 没有提供-c/-k证书时,TLS 握手会被检测到但无法解密,工具会提示你先用gen_certs.sh生成证书;
  • 修改会改变消息长度的协议字段(如 MySQL)必须同时更新长度头,否则连接会中断;
  • 工具完全同步转发,不改变原有会话时序;
  • 合规提醒:仅在你拥有或获得书面授权的系统上使用,未经授权的中间人拦截是违法行为。

小结

mitm_relay 用一个"把协议数据伪装成 HTTP 请求体"的巧思,让你零配置地把 Burp 的能力扩展到任意 TCP/UDP 协议上。配合 STARTTLS 证书支持,IMAP、SMTP、XMPP 这类加密邮件/IM 通道也能被轻松"中间人",是厚客户端安全评估工具箱里一把锋利的瑞士军刀。🔧

【免费下载链接】mitm_relayHackish way to intercept and modify non-HTTP protocols through Burp & others.项目地址: https://gitcode.com/gh_mirrors/mi/mitm_relay

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询