简介:西南科技大学网络攻防与对抗实验三的ARP欺骗实验报告,面向学习网络安全攻防、网络协议安全的高校学生。报告基于Windows XP与Windows 7双虚拟机环境,使用Cain与Winpcap工具完成对网关MAC地址的篡改,详细演示了ARP欺骗的完整过程,包括环境配置、主机扫描、欺骗规则添加、telnet与FTP服务搭建、抓包验证及ARP缓存对比分析,并总结了实验中的常见问题与排错思路。资源共1个doc文件,压缩包大小约1.99MB,内容为完整验证型实验报告,包含实验目的、步骤要点、讨论分析及自我评价,可直接作为撰写实验报告或考前复习的参考模板。该资源已有2380人学习下载,对理解ARP协议脆弱性和网络监听原理有实际帮助。
1. ARP欺骗实验:从“能通”到“被截”只差一条虚假应答
如果你按实验手册把两台虚拟机搭好,第一反应多半是“这也太顺利了”。XP装了Cain,Win7开着远程服务,同一个网关下地址互ping全通——然后在Cain里点几下,Win7上所有发给网关的流量,就被硬生生转到XP这台机器上。西南科技大学网络攻防与对抗实验三做的就是这个ARP欺骗。它不是利用系统漏洞,而是利用了ARP协议一个近乎裸奔的设计:收到一条“我是网关”的应答,不做任何校验就更新缓存。telnet和FTP的明文账号密码被Cain直接抓出来展示,整个过程清晰、直观,又带着一点“原来内网这么好欺负”的寒意。这个实验特别适合刚接触网络攻防、想亲手验证中间人攻击的学生和从业者。文章按实操复盘来写,从环境搭建讲到抓包分析,再讲到五个翻车现场和收尾验证,照着做基本不会卡住。
2. 实验环境搭建:XP与Win7双虚拟机,Cain和Winpcap的选型理由
2.1 为什么用XP做攻击者而不是Win7
实验手册里默认的搭配是XP做攻击者、Win7做被攻击者,这个选择不是拍脑袋。Cain这个工具最活跃的时期就是XP和Server 2003时代,它对XP的兼容性最好。Winpcap也一样,早期版本在Win7上装容易蓝屏,而XP上装Winpcap 4.1.2几乎不会出问题。更关键的是,XP对ARP欺骗的响应机制非常“朴实”——收到一条声称自己是网关的ARP应答,直接就更新缓存,没有任何防御性检测。Win7虽然也没什么像样的ARP防护,但它的协议栈在收到异常ARP时会稍微谨慎一些,做演示实验没必要跟它较劲。所以攻击者选XP,不是因为它高级,而是因为它足够配合。
Cain全称是Cain & Abel,Windows平台下经典的嗅探和密码破解工具,几乎所有流传的ARP欺骗教程都基于它。它把嗅探、欺骗、密码提取集成在一个图形界面里,对一个验证性实验来说,操作路径比“Wireshark加手工构造ARP包”的组合短得多。你只需要点几下,就能把ARP欺骗从原理变成事实。Winpcap是Cain的底层依赖,它提供的是从网卡上抓取原始数据包的接口,Cain的嗅探功能完全建立在它上面。装Cain之前必须先装Winpcap,而且要装对版本,这一点在避坑章节里会详细说。
实验前还要确认一件事:两台虚拟机用的是同一种网络模式。实验手册里给的IP是192.168.184.x网段,这是VMware的NAT模式典型网段。如果你用的是VirtualBox或其他虚拟化环境,IP会不一样,但只要两台虚拟机在同一网段、网关一致,逻辑就是通用的。不要手动去改IP——实验报告里特别提到,有人以为要自己配IP,结果发现环境本身就是通的,动手改了反而把实验搞出别的问题。
2.2 网络拓扑与IP规划:网关、靶机、攻击者三者的关系
ARP欺骗本质上是在“洗脑”别人的ARP缓存。每台主机都维护着一张ARP缓存表,记录IP到MAC的映射。正常情况下,IP 192.168.184.2对应网关的真实MAC,但攻击者发送伪造的ARP应答后,Win7就会把网关IP对应到攻击者XP的MAC上。从那一刻起,Win7发往网关的数据包,在数据链路层全部被送到XP的网卡上。
| 角色 | IP地址 | 在实验中的身份 |
|---|---|---|
| XP攻击机 | 192.168.184.134 | 安装Cain,发送伪造的ARP应答 |
| Win7被攻击机 | 192.168.184.131 | 受害者,正常访问网关和远程服务 |
| 网关 | 192.168.184.2 | 被冒充的对象,真实流量最终要转发给它 |
ARP协议是广播协议,ARP请求和应答只能在同一个二层广播域里传递。这也是为什么要强调两台虚拟机在同一网段——不在同一网段的ARP欺骗,需要先做路由层面的妥协,那已经不是这个实验的讨论范围。同网段是ARP欺骗成立的前提。实验环境里网关IP是192.168.184.2,攻击者和受害者分别是.134和.131,三者在同一个/24网段内,广播域完全重叠,欺骗条件天然满足。
实验报告里提到“网关IP地址和虚拟机IP地址对应的MAC地址值与虚拟机的MAC地址值一样”,这个观察是整场实验的判定依据。当你发现Win7的arp -a里网关那条记录的MAC变成了XP的MAC,说明欺骗已经生效。在做这一步之前,最好先在Win7上敲一次arp -d清空缓存,再敲arp -a看原始状态,这样后面对比起来更直观。不清缓存的话,Win7可能还保留着几分钟前的正确网关MAC,你看到的结果会误导判断。
2.3 telnet和FTP服务搭建:两条命令和一个容易漏掉的组
为什么要在XP上开telnet和FTP?因为ARP欺骗抓的是明文流量,telnet和FTP都是明文协议,账号密码直接在数据包里以ASCII码传输,Cain抓下来可以直接读。用HTTPS或者SSH就不会有这个效果——加密流量抓下来是一堆乱码,验证不了欺骗的效果。所以实验设计选这两个协议,本质上是在挑“最好欺负”的服务来演示中间人攻击的价值。
# 在XP上以管理员身份打开命令提示符 # 启动telnet服务 net start telnet # 将当前用户lab添加进telnet客户端组 net localgroup TelnetClients lab /add # 启动FTP服务 net start ftp net start msftpsvcnet start telnet是把Windows自带的telnet服务拉起来,这一步经常失败,原因大多是服务组件没装。XP默认不安装telnet服务端,你需要先在“控制面板—添加或删除程序—添加删除Windows组件”里勾选telnet服务,不勾选的话net start telnet会回报“服务名无效”。net localgroup TelnetClients lab /add这一行是常见的坑,如果不把用户加进TelnetClients组,Win7连接时会直接拒绝登录。FTP服务在XP上对应IIS里的FTP组件,启动方式和telnet一样,先补组件,再net start ftp。
参数说明:net start本身没有太多参数,成败看的是服务是否注册。如果系统提示“服务名无效”,去组件安装里补IIS和telnet服务端;如果提示“服务已启动”,说明服务一直开着,直接跳过即可。FTP的用户名密码用的是XP本地账户,不是新建的FTP专用账户,这一点在实验过程中让很多人翻了车,后面专门讲。
3. Cain操作全流程:从MAC扫描到ARP欺骗触发
3.1 启动Cain并扫描活动主机:网卡选错一切白搭
Cain装好之后双击打开,它会默认选择第一块可用网卡。虚拟机里网卡通常只有一块,但保险起见还是要确认一下:Cain主界面最上方有个网卡图标,点开后能看到所有可用的网络接口,一定要选中实际参与实验的那块,对应IP应该是192.168.184.134。选错网卡是后面“抓不到包”的头号原因,因为Cain的嗅探和欺骗都依赖这张网卡做底层收发。
第一次启动Cain时,它要求Winpcap的支持。如果之前已经装过Winpcap,它会直接跳过;如果没有,Cain会弹窗提示重启,不必疑惑,装完重启工具就好。Cain本身绿色免安装,但Winpcap不行,必须单独安装。扫描活动主机,在主界面切到Sniffer标签页,点击工具栏上的“MAC地址扫描”图标,或者用“Sniffer—扫描MAC地址”菜单,扫描方式选“所有主机和路由器之间的MAC地址”。
这个扫描方式会把网关也同时加进来,后面配置欺骗规则时需要用到网关的条目。扫描结果会列出网段内所有活动主机的IP、MAC和主机名,看到Win7的IP 192.168.184.131在列表里就说明扫描成功。如果列表为空,多半是Winpcap问题或者防火墙拦截,排查方法在避坑章节。
3.2 配置欺骗规则:左边选网关、右边选目标,顺序别反
扫描完成后,把界面从Sniffer切到ARP标签页。这是Cain做ARP欺骗的主战场。界面上有一个加号图标,点击之后弹出“添加新目标”对话框。对话框分左右两个列表:左边是路由器列表,右边是目标主机列表。这里必须遵守固定操作:左边选中网关192.168.184.2,右边选中被攻击者192.168.184.131,然后确定。
这个顺序为什么不能反?因为ARP欺骗模拟的是“网关的角色”。你要让被攻击者相信攻击者就是网关,所以左边必须是它信任的网关IP,右边是它的真实IP。如果反着选,Cain会尝试去欺骗网关,让网关相信攻击者是Win7,这也会产生某种效果,但实验里验证telnet和FTP的流量会失败——你截的是Win7发给网关的流量,而不是网关发给Win7的流量。实验报告没有明确写这一步的逻辑,但它决定了后面的抓包成败。
配置完规则后,ARP列表里会出现一行记录,显示“192.168.184.2 <-> 192.168.184.131”这样的一对,状态是待命。此时还没有开始欺骗,只是把规则挂上了。这里的<->方向只代表欺骗关系的两端,不代表流量已经经过攻击者。
3.3 执行欺骗:黄色图标按下去的瞬间发生了什么
工具栏上有一个黄色图标,通常位于ARP标签页的右上方,图标形状像一个闪电,点击后Cain就开始对Win7持续发送伪造的ARP应答,宣告自己是网关。从这一刻起,Win7发给网关的数据帧就全被送到XP的网卡上。Cain负责把收到的包继续转发给真正的网关,保证通信不断开,实现透明中间人效果。
为什么要持续发送?ARP缓存是有时效的。Windows的ARP缓存条目一般存活120秒左右,如果不持续刷新,Win7过一两分钟就会因缓存超时而重新发送ARP请求,此时如果攻击者不发应答,它就会重新正常地给网关发数据,欺骗中断。Cain的毒化功能就是定时补发伪造应答,让受害者始终维持错误的缓存,这个细节是理解ARP欺骗稳定性的关键。
欺骗启动后,Win7这边几乎没有任何感知。它的网络连接仍然正常,访问网关、远程telnet都不受影响,因为Cain会做透明的包转发。也正是因为这种“无感”,中间人攻击才可怕。此时在Win7上敲arp -a,会看到网关192.168.184.2对应的MAC已经变成了XP的MAC地址,去VMware的网卡设置里对比两块虚拟网卡的物理地址可以确认。
3.4 验证ARP缓存:实验手册里“对应一致”的判定方法
实验的最后一步是观察ARP缓存。在Win7的命令提示符里敲arp -a,输出结果中网关那条记录的物理地址,应该与XP网卡的MAC地址完全一致。实验报告里描述为“Xp的地址Win7的arp –a信息对应是一致的”,意思就是Win7的ARP表被改写成功。这里有一个容易混淆的点:ARP缓存里有动态条目和静态条目之分。ARP欺骗改写的是动态条目,所以观察的时候不要刻意做静态绑定,否则看不到变化。
验证时还可以反向操作:在XP上看着Cain的Sniffer记录,同时让Win7去ping网关,Cain里会出现对应的ICMP请求包。通过对比发包时间和Win7上的ping动作,可以确认数据链路完全被攻击者接管。到这里,ARP欺骗的核心流程已经闭环了。从环境准备、MAC扫描、规则配置到毒化启动、缓存验证,五个步骤构成完整链路。很多人在这个流程里翻车,不是原理不懂,而是操作顺序和工具细节没理顺。下面把telnet和FTP两个场景单独剖开,因为各自都有隐藏的坑。
4. 抓包分析:telnet与FTP凭据捕获的实操验证
4.1 telnet明文抓取:从连接成功到看见账号密码
在Win7上打开命令提示符,输入telnet 192.168.184.134,输入实验设置的账号密码。连接建立后,你的每次登录、每条命令,都在以明文形式穿过局域网。回到XP上的Cain,切换到Sniffer标签页,打开密码面板,就能看到刚才截获的telnet会话信息——用户名、密码,甚至你登录后敲过的命令,全部以可读文本展示。
telnet的原理决定了它没有加密通道,客户端和服务器之间传输的数据都是原始字节流。实验报告里说的“抓取到包含登录信息的包”,在Cain中的表现就是密码面板中多了一条STelnet记录,展开后能看到从Login到Password到登录成功的完整过程。整个抓包不需要额外配置,前提是ARP欺骗已经处于生效状态——如果你的Cain没抓到telnet包,先检查黄色图标是否还在毒化状态,因为停止后ARP缓存会在一两分钟内恢复正常。
这里有个观察点值得拿来说:Cain并不是只抓登录那一个包,而是抓了这条TCP连接的全部数据。你在telnet里敲的命令,Cain都会记录下来,只是密码面板优先展示账号密码字段。这也解释了实验报告里“在cain上仍然显示着信息”的现象——只要连接没断开,Cain持续能看到后续流量。对初学者来说,这个细节很容易误以为Cain“什么都能抓到”,其实它抓的是流经攻击者网卡的数据流。
4.2 FTP抓包第一次失败:一个值得反思的“失败”
实验设计里的FTP抓包流程是:在Win7上执行ftp 192.168.184.134,输入用户名密码。第一次输入时,实验者以为需要创建一个新的FTP专用账号,结果服务器直接拒绝。第二次改用XP的本地用户,连接成功。这个“失败”揭示了FTP认证的一个关键机制:IIS的FTP服务默认使用Windows本地账户做认证,它没有自己独立的用户体系。
用XP本地用户登录后,回到Cain的密码面板,FTP那条记录就会出现,包含用户名和对应的明文密码。FTP和telnet一样没有加密,甚至更危险:FTP控制连接的所有命令都是明文,密码就存在于前几个TCP载荷里。Cain抓包时会区分协议类型,FTP记录以FTP前缀标出,展开后能看到USER和PASS两个命令后的值,这就是登录凭据。
第一次失败时,Cain的密码面板里也会出现一条FTP记录,但那条记录里不会有密码,只有失败的用户名——因为FTP客户端根本没有发送PASS命令。实验报告里对“第一次失败仍显示信息”的疑惑,到这里就有了解释:Cain抓的是网络层包,不是“成功登录”事件。只要网络层有数据,它就会记录并展示。这个细节对理解嗅探工具非常重要:它忠实记录的是流量本身,不是业务逻辑。
4.3 从抓包结果反推ARP欺骗的完整链路
把telnet和FTP的抓包结果放到一起,可以画出完整的数据流向。Win7上的用户敲入命令,数据包封装成IP包,在二层封装帧头时查ARP缓存,发现目的IP网关对应的是XP的MAC,于是将帧发往XP。XP收到后,Cain记录数据,同时调用Winpcap把数据原样转发给真正的网关。网关把响应发回Win7,同样要经过XP,Cain在中间做了一次既不改变IP层也不改动内容的中继,只记录流量。
从攻击者的视角看,XP上所有流程几乎是自动的,你只需要启动毒化、被动等待。Cain替代了手工构造ARP包和手工转发的全部工作,这也是这类工具的价值:让攻击者可以集中精力在分析流量上,而不是纠结包怎么构造。实验里“在xp中开启ftp服务,win7中使用ftp命令连接到xp”的操作,本质上是创造一次可采集的流量,让实验的观察点真正落地。
需要提醒的是,ARP欺骗只能捕获通过被欺骗目标发出或接收的、且路径经过网关的流量。目标与其他主机之间不经由网关的通信,并不会被截获。这个边界在真实的多人局域网里尤其明显:如果只欺骗了Win7,而Win7直接和另一台机器通信,那些包不走网关,攻击者也看不到。理解这个边界,才算真正理解ARP欺骗的适用范围——它截的是“穿过网关”的流量,不是局域网内所有流量。
5. ARP欺骗实验避坑指南:五个翻车现场与解决路径
ARP欺骗的原理一句话能讲完,但实验真正做到顺,会碰到一堆跟原理无关的工具问题。这一章把我做这个实验以及帮别人排查时遇到最多的五个现象列出来,每一条按现象、原因、解决的顺序写,方便你在自己的实验里对照检查。
5.1 现象1:Cain扫描MAC地址后列表为空
点完扫描图标,进度条跑完,列表里一个IP都没有,网关和Win7的MAC都找不到。
原因:最常见的是Winpcap没装好或版本不对。Cain需要Winpcap 4.x版本的驱动支持,如果之前用过其他网络工具覆盖了驱动版本,Cain会无法读取网卡。另一个原因是Windows防火墙开启,拦截了Cain的探测包。
解决:先卸载当前Winpcap,重新安装Winpcap 4.1.2,然后重启虚拟机。如果装了之后扫描仍旧为空,把XP的防火墙临时关闭,或者对Cain添加例外规则。注意Winpcap是Cain的底层依赖,不是Cain自带的,必须单独安装。装完Winpcap之后重启是必须的,不要偷懒跳过。
5.2 现象2:telnet服务启动失败或连接被拒绝
在XP上执行net start telnet,系统提示“服务名无效”。在Win7上telnet 192.168.184.134,一直等到超时或直接连接失败。
原因:服务名无效说明telnet服务组件根本没安装,XP默认不装。连接被拒绝则分两个分支:一是telnet服务没启动成功,二是用户没有被加入TelnetClients组。
解决:先打开控制面板的“添加或删除程序—添加/删除Windows组件”,勾选telnet服务端,安装完成后重启。然后执行net start telnet,看到“Telnet服务已启动成功”才算就绪。最后把当前用户加进TelnetClients组,命令是net localgroup TelnetClients lab /add,注意lab要替换成实际使用的用户名。另外,Win7默认也没有telnet客户端,需要在Win7上安装telnet客户端组件,这一步往往被忽略。
5.3 现象3:FTP登录第一次失败,以为账号建错了
在Win7上执行ftp 192.168.184.134,输入一个自定义的用户名密码,服务器提示登录失败,常见报错是530 User cannot log in。
原因:误以为FTP服务有独立的账号体系。实际上IIS的FTP服务默认用Windows本地账户做认证,账号必须存在于XP系统的用户列表里,密码就是该用户的登录密码。
解决:不要创建新账号,直接在FTP命令行里输入XP本地用户(如Administrator或lab)的账号密码。如果还是失败,检查该用户密码是否为空、是否被锁定,以及IIS FTP服务的身份验证方式是否允许除匿名之外的方式。还有一个操作细节:在Win7的命令提示符里输入FTP密码时要手打,不要从别处复制带上多余空格,否则会提交一个含空格的用户名,同样登录失败。
5.4 现象4:ARP欺骗图标点了,Cain里却抓不到任何包
黄色图标已经按下,ARP标签页显示毒化状态,但Sniffer标签页里没有出现新数据包,密码面板也一直空白。
原因:先排查网卡选择。如果Cain用的是错误的网卡,比如虚拟机里有多块网卡而你选了与192.168.184.x网段无关的那块,欺骗包会被送到错误网络。再排查ARP欺骗规则,确认左边是网关、右边是Win7,同时Win7的ARP缓存是否已经更新。
解决:在Cain主界面重新选择网卡,选定IP为192.168.184.134的那块。然后在Win7上执行arp -a,查看网关条目是否已经是XP的MAC。如果不是,回到ARP标签页重新点击黄色图标。如果再不行,在Win7上执行arp -d清空缓存,立刻ping 192.168.184.2制造一次ARP查询,让欺骗更快生效。抓不到包的时候,不要反复点图标,先冷静看Win7上的ARP缓存状态,那才是欺骗是否生效的最终依据。
5.5 现象5:Win7的arp -a里网关MAC没变,欺骗没生效
ARP缓存里网关192.168.184.2对应的MAC还是真实网关的MAC,没有变成XP的MAC。
原因:ARP欺骗规则配置正确但未触发,或者Cain版本与Winpcap之间不兼容。个别版本的安全软件也会拒绝不规则ARP应答,导致欺骗数据包被本地协议栈忽略。
解决:检查Cain的ARP规则列表,确认存在“192.168.184.2 <-> 192.168.184.131”这条记录,且状态不是暂停或停止。然后重新点一次黄色图标,在Win7上连续ping网关,同时观察arp -a。多次尝试如果仍无效,换一套Cain版本并重装Winpcap。虚拟机环境下版本匹配有时候是玄学,换版本往往比反复调试更节省时间。这里要记住一个原则:ARP欺骗依赖持续发送伪造应答,任何中断都会让受害者恢复正确ARP条目,所以排查时先确认毒化状态是在持续,而不是点了一次就结束。
6. 实验收尾技巧:用ARP缓存对比与静态绑定验证结果
实验做到最后,验证不能只看Cain里有没有账号密码,还要把“欺骗是否生效”这件事用数据确认下来。我的习惯操作是这样:在Win7上先执行arp -d,清空ARP缓存,再执行arp -a,拿到一张干净的缓存表做基线。然后启动Cain的毒化,等十几秒,再执行一次arp -a,对比网关条目的MAC变化。两次对比,比单独看一次结果更能说明问题。如果两次结果没差别,说明欺骗没生效,赶紧回到第5章的排查路径。
# 在Win7上清空并重新查看ARP缓存 arp -d arp -a # 防御视角:用静态绑定固定网关MAC arp -s 192.168.184.2 00-0c-29-xx-xx-xx第一行arp -d是清空整张动态ARP缓存,第二行arp -a是重新查看当前缓存。清空后再观察,能排除掉陈旧缓存对判断的干扰。如果你的环境中清空后网关那条记录迟迟不出现,说明Win7还没有发起访问网关的流量,先ping一下网关再arp -a。第三行arp -s是静态绑定的写法,把网关IP固定到真实MAC上,之后即使收到伪造ARP应答也不会改写这条记录。这是最简单的ARP欺骗防御手段,适合实验室环境,真实网络中需要依赖交换机的DAI功能,但那是另一个话题了。
从那以后,我每次做完ARP欺骗实验,都会强制走一遍“清缓存—毒化—对比缓存—抓包确认”的完整验证链路,而不是看到Cain里出现一条记录就草草收工。毕竟一条记录可能来自多种原因,只有ARP缓存的变化是不可抵赖的判定依据。这个实验不难,但值得你耐心做透,因为中间人攻击的模型以后会在很多攻防场景里反复出现。希望这个流程能帮你在做西南科技大学这门实验课时少走弯路。
本文还有配套的精品资源,点击获取