尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Kali下arpspoof安装排错与ARP断网攻击实战演示

Kali下arpspoof安装排错与ARP断网攻击实战演示 说个我踩过的坑Kali默认镜像里不保证带arpspoof。完整版可能还有一点运气成分很多精简版和Live环境里敲一个arpspoof大概率就是command not found。新手遇到这情况一般会去搜教程有人让你装dsniff有人让你从源码编译还有人直接劝你换工具。我今天先把结论放前面arpspoof就是dsniff工具集里的一个成员一条sudo apt install dsniff就能装好根本不需要搞源码。真正坑人的从来不是安装本身而是装好之后的接口选择、转发开关、欺骗方向以及各种莫名其妙的报错。这篇内容适合正在学Kali、刚接触内网渗透测试、或者工作上要做网络协议验证的朋友。我会从安装开始把arpspoof的常见报错和每条排查链路都过一遍最后在一个自建的实验环境里完整复现一次局域网ARP断网攻击并说清楚攻击停止之后怎么把网络还原。文中所有操作请严格限制在你自己搭的虚拟机、实验网络或甲方明确授权的测试环境里。未经授权去欺骗别人的网络边界问题不用我多讲大家心里有数就好。1. 为什么Kali默认不带arpspoof环境准备与安装全流程1.1 arpspoof与dsniff工具集之间那点关系很多教程把arpspoof当成一个独立工具来讲实际上它的真正归属是dsniff这个工具集。dsniff是Dug Song在很早期写的一套网络审计工具里面除了arpspoof还有dnsspoof、macof、tcpkill、msgsnarf、urlsnarf这些命令。这套工具虽然年代久远但因为核心逻辑简单可靠至今仍被各大发行版持续维护Kali的软件源里也一直有。用apt安装dsniff时整个工具集里的命令都会装进去arpspoof只是其中之一。理解这层关系对排查问题很重要因为网上有不少老教程会让你去官网下载源码、自己编译这在没有特殊定制需求的情况下完全是绕远路。Kali的包管理已经帮你解决了依赖自己编译反而容易在libnet、libpcap这些依赖上翻车。关于Kali默认不带arpspoof这个说法准确讲是不同版本的镜像预装情况不一样。判断方法很简单直接在终端执行which arpspoof没有输出就说明当前环境里没有这个命令需要手动安装。1.2 装之前先确认三件事安装之前先别急着敲apt命令花一分钟确认三个基础条件能省掉后面大部分排错时间。第一确认当前系统确实是Kali而不是Ubuntu或其他Debian系发行版。很多朋友用的虚拟机镜像名写着Kali实际系统是Ubuntu加了一个Kali桌面主题软件源和包管理习惯完全不同。查看系统信息cat /etc/os-releaseKali的ID字段会显示kali如果显示ubuntu或debian那后面执行dsniff安装虽然大概率也能成功但遇到Kali特有源时会有各种预期外的行为。第二确认软件源可用。Kali的源配置主要在/etc/apt/sources.list和/etc/apt/sources.list.d/目录下。如果之前改过源、或者源里的镜像地址已经失效apt update会报一堆Failed to fetch这时候安装dsniff自然也会失败。执行一次sudo apt update看到输出里没有大段红色错误再继续往下走。第三顺手看看自己的网卡接口名。这一步很多人会忽略但它是后面所有实验的基础。Kali默认桌面环境下的有线网卡不一定叫eth0虚拟机里常见的接口名有ens33、enp0s3云主机上可能是enpXsY无线网卡通常是wlan0。执行ip link show把看到的接口名记下来后续arpspoof的-i参数要用。1.3 安装和验证三个前置条件确认完安装就是一条命令的事sudo apt install -y dsniffapt会自动把dsniff及其依赖装好。这里有个小提醒如果系统长时间没更新过可能会出现依赖版本冲突apt会提示你一些包需要先升级。这种情况不要硬装先执行sudo apt full-upgrade把系统依赖关系理顺再回来装dsniff。安装完成后验证一下which arpspoof arpspoof直接执行arpspoof不带任何参数如果正常会打印usage信息列出-i、-t这些参数说明。看到usage就说明命令已经可用。想确认arpspoof具体安装位置和包归属可以用dpkg -L dsniff | grep arpspoof会输出类似/usr/sbin/arpspoof的路径证明这个命令确实来自dsniff包。2. arpspoof关键参数与运行原理理解之后再敲命令2.1 ARP协议为什么这么好骗ARPSPOOF能工作完全是因为ARP协议本身的设计缺陷。ARP是IPv4局域网里的地址解析协议作用是把IP地址翻译成MAC地址。它的工作方式非常朴素主机A要访问192.168.1.1会先查自己的ARP缓存表表里没有对应的MAC地址就发一个广播谁是192.168.1.1请把你的MAC地址告诉我。目标收到广播后单播回复自己的MAC地址A收到后把这个映射关系写进缓存。听起来很合理但问题在于这个协议没有任何认证机制。收到ARP应答的主机不会校验这个应答是不是真的来自被询问的人。更致命的是ARP缓存采用后到优先的更新策略也就是说即使主机没有主动询问过某个IP只要网卡上收到一个ARP应答包它就可能用包里的信息覆盖已有缓存条目。可以这么理解ARP缓存就像公司前台的一份通讯录任何人都能往里贴一张纸写着财务总监电话改了新号码是1234567。前台不会去核实纸条真假大家以后联系财务都按新号码来。arpspoof干的就是这个事它不断向目标主机发送伪造的ARP应答让目标相信网关的MAC地址就是攻击机的MAC地址。2.2 一行命令里的两个欺骗方向arpspoof的命令格式不长但每个参数都有明确的指向arpspoof -i 网卡名 -t 目标IP 伪装IP三个关键要素拆开看-i指定从哪块网卡发出ARP包。这必须和攻击机与目标处于同一网段的那块网卡对上。-t指定欺骗目标也就是谁会被骗。这里填目标主机的IP。最后的host要伪装的地址也就是你想让目标误以为的真实IP在局域网断网攻击场景里通常填网关IP。最常用的两种组合方式第一种只欺骗目标主机sudo arpspoof -i eth0 -t 192.168.1.20 192.168.1.1这条命令向192.168.1.20持续发送伪造的ARP应答告诉它192.168.1.1的MAC地址是攻击机的MAC。效果是目标主机把发往网关的流量都交给了攻击机。第二种欺骗网关sudo arpspoof -i eth0 -t 192.168.1.1 192.168.1.20这条命令反向欺骗网关告诉网关192.168.1.20的MAC地址是攻击机的MAC。效果是网关把发往目标主机的下行流量都交给了攻击机。两种方向配合使用就是常说的双向欺骗也是把网络完全切断的关键下面会展开讲。2.3 ip_forward开关为什么它是断网和中间人的分水岭搞明白arpspoof的两个方向之后还有一个决定实验效果的开关IP转发。Linux内核里/proc/sys/net/ipv4/ip_forward这个参数控制着系统是否转发那些目的IP不是本机的数据包。值为0时不转发值为1时转发。查看和修改的命令cat /proc/sys/net/ipv4/ip_forward sudo sysctl -w net.ipv4.ip_forward0这个开关直接决定了arpspoof的两种攻击形态当ip_forward0时目标主机发给网关的流量会被攻击机接收但内核发现目的IP不是自己又没开转发直接丢弃。流量有进无出目标就表现为断网。当ip_forward1时攻击机收到目标发来的流量后内核会转发给真实的网关目标依然能正常上网但所有流量都经过攻击机。这时候配合Wireshark、tcpdump或者其他抓包工具就能在攻击机上看到目标的明文通信内容这就是中间人攻击的雏形。所以同样是arpspoof开不开转发效果完全不同。做断网攻击时保持0做流量监听时置1。实验结束后记得把这个值改回0做一个干净的好习惯。场景欺骗目标欺骗网关ip_forward效果单向断网是否0目标发出流量被截获丢弃下行流量仍能收到完全断网是是0目标收发全部中断中间人监听是是1目标正常上网但流量全部经过攻击机3. 实战坑位复盘arpspoof最常见的5个报错与排查链路3.1 command not found安装失败的三种打开方式command not found是新手遇到最多的错误常见原因有三种。第一种dsniff确实没装。确认方法apt list --installed | grep dsniff dpkg -L dsniff | grep arpspoof如果dpkg -L没有输出说明包没装上回去执行安装命令。第二种装是装上了但当前shell的PATH里没包含/usr/sbin。某些发行版的普通用户PATH不含/usr/sbinarpspoof装在/usr/sbin下直接敲命令就找不到。这种情况用完整路径执行或者改用root用户执行即可。第三种系统根本不是Kali。前面说过有些镜像套着Kali主题但底层是UbuntuUbuntu的源里虽然也有dsniff包但行为和Kali会有细微差别。最稳妥的做法是确认系统版本后按对应发行版的方式处理。3.2 接口名不对系统真实网卡名怎么挖出来刚接触Kali虚拟机的人十有八九会在接口名上栽一次。教程里写-i eth0你照抄结果报arpspoof: interface eth0 does not exist或者干脆没报错但包根本发不出去。原因很简单Kali在VMware里默认网卡名是ens33VirtualBox里可能是enp0s3云主机上的网卡名更随意。别猜直接查ip link show输出里那些UP状态的接口就是可用的网卡。通常有回环地址lo、有线网卡名字可能五花八门、无线网卡wlan0。根据实际名字修改-i参数比如sudo arpspoof -i ens33 -t 192.168.1.20 192.168.1.1无线网络环境下还需要注意一点如果你用的是wlan0需要确认无线网卡处于连接状态接口是UP且关联到了目标所在的同一个Wi-Fi网络。很多无线网卡在唤醒或休眠后会短暂丢状态调设备时先ip link show确认。3.3 权限报错为什么有时候sudo也不管用arpspoof要发送原始套接字raw socket数据包这需要root权限。普通用户直接执行会看到类似Operation not permitted的报错或者是socket: Operation not permitted。解决方式就是sudo arpspoof -i eth0 -t 192.168.1.20 192.168.1.1但有些场景下就算加了sudo依然报权限错误。这种情况多半是运行环境少了CAP_NET_RAW能力。典型场景是Docker容器里跑Kali工具集容器默认权限受限即使容器内是root也没法创建原始套接字。解决办法是启动容器时加上--cap-addNET_RAW或者在宿主机里直接做实验。Kali官方虚拟机镜像一般不会遇到这个问题但了解这个坑能帮你在排查时少走弯路。3.4 ARP包一直在发但目标就是不掉线这是问得最多的一个问题攻击机这边arpspoof运行得好好的终端也不报错但目标主机就是没断网。别急着怀疑工具没用按下面的链路逐一排查。第一确认欺骗方向是否完整。前面提到只骗目标不骗网关目标的出流量虽然被截获但下行流量还是正常到达。这表现为能收到消息但发不出去很多新手觉得这就是没效果。要做完整断网需要两个终端分别对目标和对网关发起欺骗。第二确认目标与攻击机是否处于同一个广播域。如果中间隔着路由器、开启了AP隔离的无线网络或者不在同一台交换机下ARP应答根本传不到目标欺骗自然失败。ARP是二层协议广播域边界就是它的作用边界。第三也是最直接的验证方式去目标主机上执行arp -aWindows下输出会类似接口: 192.168.1.20 --- 0x9 互联网地址 物理地址 类型 192.168.1.1 00-11-22-33-44-55 动态看网关192.168.1.1对应的物理地址如果已经变成了攻击机网卡的MAC说明欺骗生效了。如果还是网关的真实MAC说明ARP应答根本没有改变目标主机的缓存表。这时候再回头查目标是否做了静态ARP绑定、交换机是否开了DAI、或者目标主机装了EDR一类的防护软件。3.5 报错Could not get MAC address for target目标真的在线吗arpspoof启动时会先解析目标IP对应的MAC地址。如果目标是关机状态、IP不在线或者网段填错它会直接报arpspoof: Could not get MAC address for target这是最容易误判的错误之一你会以为是攻击机的问题其实问题出在目标上。排查链路如下先在攻击机上ping目标ping -c 3 192.168.1.20能通说明目标在线不通检查目标是否开机、是否在同一网段、IP是否填写正确。ping通之后再确认攻击机自己的ARP缓存里出现了目标条目ip neigh如果ping通了但ip neigh里看不到目标可能是防火墙或网络策略挡了ARP解析。这时用arp-scan扫一下整个网段确认哪些IP在线sudo arp-scan -larp-scan是排查局域网环境的好帮手它会列出所有能响应ARP请求的设备及对应的MAC地址和厂商信息。目标确实在线、确实能解析出MAC再启动arpspoof基本就不会再碰到这个报错。4. 局域网ARP断网攻击实验环境下的完整演示与清理4.1 实验拓扑与前置确认动手演示之前先把实验环境说清楚。下面这套拓扑是局域网ARP断网攻击最经典的结构攻击机和目标机在同一广播域内中间是交换机或无线路由器。攻击机Kali LinuxIP 192.168.1.10网卡eth0。 目标机Linux或Windows均可IP 192.168.1.20网关192.168.1.1。 真实网关路由器IP 192.168.1.1。三台设备通过同一台交换机或无线路由器相连。这么设计的原因是攻击机、目标机、网关都必须在同一个二层网络里ARP欺骗才有施展空间。实验前在攻击机上确认三件事ip a # 攻击机网卡名和IP ping -c 3 192.168.1.20 # 目标在线 ip route | grep default # 确认网关IP这里特别提醒一点虚拟机用户要确认自己的网络模式。VMware的NAT网络里网关一般是192.168.88.2或192.168.xxx.2这种地址桥接模式下网关才是物理路由器的地址。很多人实验没效果就是把NAT网段的网关和物理网段的网关搞混了欺骗包发错了方向。4.2 单向欺骗到双向欺骗断网效果差在哪第一步先做单向欺骗让目标发不出流量sudo arpspoof -i eth0 -t 192.168.1.20 192.168.1.1这条命令运行后终端不会打印持续输出这是正常的。arpspoof的设计就是静默工作只有出错时才报信息。它现在正在循环向目标192.168.1.20发送伪造的ARP应答内容是192.168.1.1网关的MAC是攻击机网卡的MAC。此时在目标机上测试会发现ping网关192.168.1.1开始丢包或超时打开网页一直转圈打不开已建立的网络连接中能收到对方发来的消息但自己发出去的内容对方收不到这就是单向欺骗的效果出方向流量被截获进方向流量还正常。这个状态很像网络没断但什么都干不了。第二步新开一个终端执行另一条方向的欺骗sudo arpspoof -i eth0 -t 192.168.1.1 192.168.1.20这条命令是欺骗网关让网关认为192.168.1.20的MAC也是攻击机的MAC。两个方向的欺骗同时生效后目标主机和网关之间的流量全部改道经过攻击机而攻击机又没有开启IP转发所有数据包进入攻击机内核后直接被丢弃。这个状态下目标主机是彻底断网收发全断ping网关不通ping公网也不通。提示再次强调这套演示要在你自己搭的虚拟机、实验网络或授权测试环境里做。对真实网络中他人设备执行断网攻击属于明确的越界行为后果自己掂量。4.3 停止攻击和善后怎么把网络完整还原实验做完善后工作比攻击本身更重要这也是专业和业余的差别。首先在两个arpspoof终端里分别按CtrlC停止欺骗。此时攻击机不再发送伪造ARP包但目标机和网关的ARP缓存里仍然残留着刚才被污染的条目。如果直接走人目标机的缓存要等老化时间才会自动刷新Windows约15到120秒Linux约30到60秒。为了立刻恢复手动清缓存。目标机如果是Linux执行sudo ip neigh flush dev eth0 ping -c 3 192.168.1.1第一条命令清空网卡上的邻居缓存ARP表第二条命令让目标机重新通过ARP请求解析网关的真实MAC。目标机如果是Windows执行arp -d * ping 192.168.1.1攻击机这边如果实验过程中开过IP转发记得关掉sudo sysctl -w net.ipv4.ip_forward0最后一步在目标机上再次执行arp -a确认网关192.168.1.1对应的MAC已经恢复为路由器的真实MAC。确认无误后再ping一次公网地址比如ping -c 3 1.1.1.1通了就说明网络完全恢复。我在实操中的感受是这套善后流程看起来简单但很容易漏。第一次做实验时我停掉攻击就以为完事了结果目标机的浏览器还一直打不开网页原因就是ARP缓存里残留了假网关条目。从那之后我把恢复ARP表当成每次实验的必需步骤来执行。5. 从攻击视角反推防护做完实验我建议你顺便验证这些5.1 为什么ARP欺骗到今天还能在局域网里通杀很多人会问都这么多年了为什么ARP欺骗依然有效核心原因在于ARP协议是二层协议而主流二层交换机对ARP报文几乎没有拦截能力。交换机确实能学习MAC地址、隔绝冲突域但它不关心ARP应答包的内容是否可信。一台普通交换机收到我是192.168.1.1的ARP应答包它的处理方式就是原件转发到对应端口不做任何校验。无线网络里客户端隔离功能可以阻止客户端之间直接通信但挡不住针对网关本身的欺骗因为网关是共享资源所有客户端都要和网关通信。所以在今天一个没有做静态ARP绑定、没有部署DAI、没有开启DHCP Snooping的局域网ARP欺骗依然是百发百中的老招式。这不是工具多厉害而是协议本身的信任模型太脆弱。5.2 静态ARP绑定让arpspoof当场失效的实验理解攻击之后更容易理解怎么防御。最直观的验证方法是给目标主机配置静态ARP条目手工锁定网关的MAC地址。目标机是Linux的话sudo ip neigh replace 192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 nud permanent其中00:11:22:33:44:55要替换成网关路由器真实的MAC地址可以从ip neigh输出里找到。配置好之后重新启动arpspoof去欺骗这台目标机然后去目标机上arp -a会看到网关条目一直是手动设置的MAC根本没有变化。欺骗包确实到了目标机但内核发现ARP缓存条目是permanent类型不会用动态信息覆盖。Windows上也可以做类似操作但命令和权限管理因版本而异这里不展开。总体思路是一样的只要ARP缓存不被外部包更新ARP欺骗就无计可施。5.3 演示之外这些思路还能用在哪些合法场景ARPSPOOF虽然不是新工具但它在实际工作中的价值并不仅限于断网这一个演示用途。在授权测试和网络管理中它还有几个比较常见的应用方向。第一验证网络设备对ARP欺骗的防御能力。内网设备有没有做静态绑定、交换机是否部署了DAI用arpspoof配合目标机的arp -a结果几分钟就能测出来。第二配合其他工具做中间人测试。开启ip_forward1让流量经过攻击机再用Wireshark或tcpdump抓包分析目标主机的网络行为这是内网渗透测试里验证明文协议风险、测试会话劫持概率的常用手段。第三教学演示。ARP协议的信任缺陷、二层攻击的基本原理、网络流量如何被劫持这些都是网络安全入门阶段绕不开的知识点。拿arpspoof做实验比单纯看PPT直观得多。第四排查网络问题。某些场景下网管可以用它快速验证如果某台设备收不到网关响应会引发什么连锁反应从而反向定位二层网络里的故障环节。不过要再次强调以上所有场景都以授权为前提。自己搭的实验网络、公司指派的测试任务、网络安全课堂上的教学实验这些都没问题。未经允许对陌生网络做任何形式的ARP欺骗都不属于技术探讨的范畴而是实实在在的越界行为。最后说一个我自己的小习惯。做这类实验时我习惯在攻击机上同时开一个tcpdump实时观察网卡上有没有出现本不该来的流量sudo tcpdump -i eth0 -n host 192.168.1.20如果能看到目标主机发送的大量数据包说明欺骗已经成功让目标把网关流量转发到了攻击机。这个观察方式比看终端输出直观得多也方便确认本次实验到底成没成功。配合这套从安装、排错、断网演示到善后恢复的完整流程希望在实验室里的你能少走一些我当初绕过的弯路。
返回列表