2、中间人攻击原理:ARP欺骗与SSL剥离、伪造证书的注入方式、Wireshark抓包分析攻击流量
中间人攻击(MITM)这个词,你肯定听过。但说实话,很多人对它的理解停留在「有人在中间偷看」这个层面。到底怎么做到的?攻击者凭什么能插到你和服务端中间?
这一章,我们就来拆解三种最核心的中间人攻击手法:ARP欺骗、SSL剥离和伪造证书注入。最后我会带你用Wireshark抓包,亲眼看看攻击流量长什么样。
核心认知:中间人攻击不是单一技术,而是一套组合拳。攻击者必须先「进入通信路径」,然后「降级或绕过加密」,最后「注入伪造身份」。缺一环都打不通。
2.1 ARP欺骗:攻击者如何「插队」到你和服务器之间
ARP(地址解析协议)本身是个很简单的协议——把IP地址翻译成MAC地址。但它的设计有个致命缺陷:无状态、无认证。
什么意思?你想想看,局域网里任何一台机器都可以随意发送ARP应答包,告诉别人「192.168.1.1的MAC地址是AA:BB:CC:DD:EE:FF」。接收方会直接更新自己的ARP缓存,连问都不问一句「你谁啊?」。
攻击流程其实就三步:
- 扫描:攻击者先扫描局域网,找到目标主机和网关的IP、MAC。
- 欺骗:向目标主机发送伪造ARP应答,说「网关的MAC是我」;同时向网关发送伪造ARP应答,说「目标主机的MAC是我」。
- 转发:攻击者开启IP转发,把两边流量都经过自己,再转给真正的接收方。
这样一来,所有流量都从攻击者机器过一遍。目标主机和网关完全不知情。
我的经验:我在一次内网渗透测试中,用arpspoof工具做演示,前后不到10秒就成功劫持了同事的HTTP流量。他还在正常刷网页,完全没察觉。这就是ARP欺骗的可怕之处——对用户完全透明。
检测ARP欺骗其实不难。你可以在网关或关键主机上查看ARP表,如果同一个IP对应了多个MAC地址,基本就是被攻击了。也可以用arping工具持续监控。
2.2 SSL剥离:把HTTPS「打回原形」
好,现在攻击者已经能截获流量了。但如果目标访问的是HTTPS网站,截获的也是加密数据,根本看不懂。怎么办?
SSL剥离(SSL Stripping)就是干这个的。这个技术最早由Moxie Marlinspike在2009年提出,核心思路是:在攻击者和服务器之间保持HTTPS,但在攻击者和受害者之间降级成HTTP。
具体怎么做的?
- 受害者输入
https://example.com,但攻击者拦截这个请求,自己跟服务器建立HTTPS连接。 - 攻击者把服务器返回的HTTPS页面中所有
https://链接替换成http://。 - 受害者看到的是HTTP页面,所有数据明文传输。
你可能会问:「浏览器地址栏不是会显示不安全吗?」对,但很多用户根本不看。而且攻击者还可以在页面里嵌入一个透明的iframe,让地址栏看起来正常。
注意:HSTS(HTTP Strict Transport Security)就是为了防SSL剥离而生的。如果服务器设置了HSTS头,浏览器会强制使用HTTPS,拒绝HTTP连接。但HSTS有个前提——第一次连接必须是HTTPS。如果第一次就被剥离了,HSTS也救不了。
我在一次红蓝对抗中遇到过这种情况:目标内网有一台老旧打印机,没有HSTS,攻击者通过ARP欺骗+SSL剥离,成功拿到了打印任务的明文内容。嗯,里面包含了一些敏感文档的标题和路径。
2.3 伪造证书注入:让浏览器「相信」假证书
SSL剥离虽然好用,但局限性也明显——如果目标网站强制HSTS,或者用户手动输入https://,剥离就失效了。这时候,攻击者需要更高级的手段:伪造证书。
伪造证书注入的核心逻辑是:攻击者在中间拦截HTTPS握手,用自己的伪造证书替换服务器的真实证书。如果浏览器信任了这张假证书,那整个加密通道就被攻击者掌控了。
但这里有个关键问题:浏览器凭什么信任假证书?
答案很简单——除非攻击者能让浏览器信任他的CA根证书。常见的方式有:
| 注入方式 | 原理 | 难度 | 典型场景 |
|---|---|---|---|
| 系统信任区植入 | 攻击者把自签名CA证书安装到受害者的受信任根证书存储区 | 中 | 内网渗透、企业管控环境 |
| 恶意软件自动安装 | 通过木马或蠕虫自动导入证书到系统存储 | 低 | 钓鱼攻击、水坑攻击 |
| 浏览器策略覆盖 | 利用组策略或MDM强制推送信任证书 | 高 | 域环境、移动设备管理 |
| 证书透明度绕过 | 利用CT日志审核延迟或私有CA签发未公开证书 | 极高 | 高级持续性威胁(APT) |
一旦假证书被信任,攻击者就可以用中间人代理(比如mitmproxy、Burp Suite)解密所有HTTPS流量。浏览器不会弹出任何警告,因为证书链验证通过了。
避坑指南:我曾经在测试一个金融App时,发现它只验证了证书的「公钥哈希」,没有验证完整证书链。攻击者只要伪造一个公钥相同的证书就能绕过。这种实现漏洞比你想的更常见。
2.4 Wireshark抓包分析:亲眼看看攻击流量
理论讲完了,我们来点实战。下面是我用Wireshark抓取的一次ARP欺骗+SSL剥离攻击流量。你可以跟着步骤自己试一遍。
2.4.1 抓取ARP欺骗流量
在Wireshark中设置过滤条件:arp。你会看到类似这样的包:
No. Time Source Destination Protocol Info
1 0.000000 攻击者MAC 广播 ARP 谁有 192.168.1.1?告诉 192.168.1.100
2 0.000015 网关MAC 攻击者MAC ARP 192.168.1.1 在 网关MAC
3 0.500000 攻击者MAC 受害者MAC ARP 192.168.1.1 在 攻击者MAC ← 伪造应答
4 0.500015 攻击者MAC 网关MAC ARP 192.168.1.100 在 攻击者MAC ← 伪造应答
注意第3和第4个包。攻击者主动发送了ARP应答,告诉受害者和网关「对方的IP对应我的MAC」。正常的ARP应答应该是请求-应答模式,不会主动推送。
2.4.2 抓取SSL剥离流量
过滤条件:http 或 tcp.port == 80。你会看到受害者明明访问的是HTTPS网站,但Wireshark里显示的却是HTTP明文请求:
GET /login HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Cookie: sessionid=abc123
看到Cookie了吗?攻击者拿到这个就能直接冒充受害者登录。这就是SSL剥离的后果。
2.4.3 抓取伪造证书握手
过滤条件:tls.handshake.type == 11(Certificate消息)。展开Server Certificate字段,你会看到:
- 证书的Issuer(颁发者)是攻击者伪造的CA名称
- 证书的Subject(主题)是目标域名
- 证书的公钥指纹与服务器真实证书不一致
如果受害者浏览器没有安装攻击者的CA证书,这里会显示一个警告。但如果安装了,Wireshark里看到的TLS握手就是正常的——这才是最危险的地方。
我的习惯:做安全分析时,我一般会同时抓两端的包——受害者端和服务器端。对比两边的TLS握手信息,如果证书指纹不一样,那中间肯定有人动了手脚。这个方法在排查内部威胁时特别管用。
2.5 三种攻击手法的关系
这三种手法不是孤立的。在实际攻击中,它们经常组合使用。我画了一张图,帮你理清它们的关系:
从图上你可以看到:ARP欺骗是「入场券」,没有它你进不了通信路径。之后攻击者根据目标的安全配置选择手法——如果目标没有HSTS,就用SSL剥离;如果有HSTS,就尝试伪造证书。最终目的都是拿到明文数据。
重要提醒:本章所有内容仅用于安全研究和防御学习。未经授权对他人网络实施ARP欺骗、SSL剥离或证书伪造,属于违法行为。我在做渗透测试时,每次都会先签好授权协议,划定测试范围。这一点请你务必记住。