MITM 劫持的过程中,HTTP 协议并不是唯一选择。
实际在 MITM 使用过程中,BurpSuite 和 Yakit 提供的交互式劫持工具只能劫持 HTTP 代理的 TLS 流量;但是这样是不够的,有时候我们并不能确保 HTTP 代理一定生效,或者说特定的后端只支持 TCP 传输层代理(Socks5)代理,那么交互式劫持将失效,也没有办法获取到基于 Socks5 代理的 HTTP 通信。
因此我们做了一些简单的验证,去实现了基于 Socks5 协议的代理劫持,同时我们以一种更加简单高效的方式让 Socks5 的代理适配了传统的普通 MITM 交互式劫持中。
TLS 劫持的本质:证书信任链的崩坏
- 内容引用自笔者在他处的 PPT 中的节选内容
因为信任链是树形结构的,可以“推导”信任关系,那么被信任的 CA 签发的证书,也会被信任。
那么理所当然的,我们得出结论:从原理上来讲,TLS 的劫持和 HTTP 代理甚至任何代理都没有半毛钱关系;从技术上来讲,HTTP 代理在其中的作用仅仅是提供了一个连接介质。
MITM-TLS 劫持时序
回顾基于HTTP 代理的MITM 劫持
如果要实现一个正常的 HTTP 代理,我们需要处理两种情况:
- 通过 Proxy-Connection 等直接 HTTP 头控制的非 TLS 劫持
- 通过 CONNECT 控制的通用 HTTP 代理。