Scapy ARP 中毒

Use*_*481 2 scapy arp

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)

它创建并发送以下数据包:

  1. 在以太层,目标 MAC 地址dst被设置为指向客户端(受害者)的 MAC。同时,Scapy 会自动填充其他 Ether 层字段,最重要的src是设置为攻击者 MAC 地址的字段。这意味着在以太层,数据包似乎来自攻击者。其他以太层字段保持不变并包含默认值。如果在 Scapy 中运行以下命令,您可以自己查看:

    a = Ether(dst="clientMAC") a.show()

  2. 现在,在 IP 层,攻击者制作一个 ARP 请求数据包,在其中他将psrc(源 IP)字段设置为指向网关节点(在本例中为 AP)的 IP。现在,请记住之前,在以太层 Scapysrc为我们填写了该字段并将其设置为指向攻击者的 MAC 地址。这意味着,发送到客户端(受害者)的最终数据包看起来像是来自具有攻击者 MAC 和网关 IP 地址的主机。我们稍后会谈到。现在,让我们继续。最后,客户端的 IP 地址被设置为pdst字段中数据包的目的地。

  3. 数据包被创建并发送到客户端(受害者)。

客户端接收此数据包并检查数据包的内容。它看到 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)

通过这个永无止境的循环,您可以有效地阻塞客户端和网关之间的通信。