20252812 2025-2026-2 《网络攻防实践》实践四报告

20252812 2025-2026-2 《网络攻防实践》实践四报告

1.实践内容

TCP/IP协议栈在设计上的安全缺陷和脆弱性,使协议栈各网络层次上均存在各种网络攻击方法,这对互联网及内部网络的安全性造成了威胁。短期内,基础TCP/IP网络协议不可能被重新设计与部署实施,无法根本改变网络面临严重安全威胁的状况。但是我们仍可以采取措施避免网络嗅探和攻击:

  • 网络接口层,要检测局域网中的监听点,尽可能消除数据广播的情况,要对关键路径上的网关、路由器等进行严格安全防护,进而减少网络嗅探的危害。
  • 网络层,要增强防火墙、路由器和网关设备的安全策略。对关键服务器要静态绑定IP-MAC映射表
  • 传输层,要实现基于面向连接和无连接服务的加密传输和安全控制机制,如身份认证、访问控制。
  • 应用层,采用用户级身份认证技术、数字签名技术、主机安全技术等防止非法入侵、身份冒用等。

(1)ARP缓存欺骗攻击

攻击者通过伪造ARP响应报文,向目标主机的ARP缓存表注入虚假数据,实现IP地址与MAC地址的错误对应。ARP协议存在无验证机制的设计缺陷,使得攻击者可向局域网内目标主机注入虚假的IP-MAC地址映射关系,进而实现中间人攻击,以及伪造、篡改、监听、拦截传输数据。

(2)ICMP路由重定向攻击

攻击者主机伪装成网关,向目标主机发送不符合实际的的ICMP重定向报文,结合IP地址欺骗技术,诱导靶机以为网络拓扑变化,从而修改自身路由选择,将所有网络流量发至攻击者所指定的恶意路由。在该攻击基础上,攻击者可实现破坏正常网络通信的DoS攻击,以及中间人攻击。

(3)SYN Flood攻击

SYN Flood攻击是一种典型的DoS攻击。攻击者向目标服务器发送大量源IP地址不存在的TCP SYN连接请求,导致服务器由于半开连接队列被快速填满而瘫痪,进而无法正常响应正常用户的连接请求。虽然一般的主机对于半开连接都有超时机制和默认重传次数,但由于半开连接队列的长度总是有限的,不计其数的SYN报文最终还是会导致半开连接队列被充满。

(4)TCP RST攻击

TCP RST攻击的核心原理是伪造TCP RST报文(设置RST=1),强制中断目标主机已建立的TCP连接。攻击者实施该攻击时,需准确猜测目标TCP连接的序列号,进而伪装成通信双方中的一方发送RST报文,使目标主机误以为通信出现异常,主动终止TCP会话,导致正常通信过程中断。

(5)TCP会话劫持攻击

在TCP会话劫持攻击中,攻击者监听或主动介入目标主机已建立的TCP会话,获取会话关键信息(如序列号、确认号)后,冒充合法用户参与通信。根据攻击手段,TCP会话劫持攻击分为中间人攻击和注入式攻击──以秘密监控通信过程、窃取通信数据为主的是中间人攻击;注入式攻击可直接接管会话,向靶机执行暴力破解口令、提权等操作。

2.实践过程

(1)ARP缓存欺骗攻击

进行此攻击实践要用到netwox,所以我先在Kali上安装netwox。
image
在此实验任务中,我的攻击机是Kali,靶机是Windows XP和Metasploitable_ubuntu。实验正式开始前,我查看各主机的IP、MAC地址。Kali的IP地址和MAC地址分别是192.168.173.68、00:0C:29:4B:AF:A2。
image
Windows XP的IP地址和MAC地址分别是192.168.173.61、00:0C:29:A0:8C:5F。
image
Metasploitable_ubuntu的IP地址和MAC地址分别是192.168.173.114、00:0C:29:73:84:A3。
image
让Metasploitable_ubuntu去ping Windows XP,发现能ping通。
image
在Metasploitable_ubuntu上执行arp -a,由于刚进行了ping操作,所以缓存中有Windows XP的IP地址与MAC地址的正确对应关系。
image
在Kali上执行netwox 80 -e 00:0c:29:4b:af:a2 1 -i 192.168.173.61。其中,00:0c:29:4b:af:a2为Kali的MAC地址,192.168.173.61为Windows XP的IP地址。-e后面跟的是伪造的ARP响应报文中的MAC地址,-i后跟的是要被假冒的IP地址。这条命令的作用是当Kali虚拟机收到任何关于192.168.173.61的ARP询问报文时,都会发送虚假ARP响应报文,声称此IP地址对应的MAC地址为00:0c:29:4b:af:a2。输入命令后回车,光标会在下面闪动,表示正在执行ARP欺骗。
image
随后在Metasploitable_ubuntu上执行ping 192.168.173.61,得不到ICMP回送回答报文了。
image
此时再在Metasploitable_ubuntu输入arp -a,发现关于192.168.173.61的缓存被非法篡改为Kali的MAC地址了。这说明刚才执行ping 192.168.173.61时,ICMP报文被发到Kali去了,Kali不回复,因此这次ping操作没有收到任何回答。
image
Kali上的Wireshark抓到的包说明了欺骗的原理。Kali替Windows XP虚拟机发送了ARP响应报文,实现了欺骗。
image

(2)ICMP重定向攻击

在seed虚拟机上ping百度,发现是通的,说明这台机器连接到了外网。
image
用route -n查看网关。网关为192.168.173.2。
image
在seed虚拟机上先ping www.163.com,先是得到123.117.132.35的正常回送回答报文。然后在Kali上执行netwox 86 -f "host 192.168.173.67" -g 192.168.173.68 -i 192.168.173.2,其中-f指定过滤器,当过滤到指定报文时,netwox会行动。-g指定要把网关重定向到什么IP地址。-i指定网关原本的IP地址。在Kali上执行此语句后,一旦Kali检测到源或目的主机是192.168.173.67的报文,它都会向192.168.173.67发送ICMP路由重定向报文,使之把下一跳改为192.168.173.68。
image
在seed的终端可以看到192.168.173.2发来了ICMP报文。这说明ICMP重定向攻击成功了。
image

(3)SYN Flood攻击

在seed虚拟机上输入luit -encoding gbk telnet bbs.mysmth.net 23。进入了输入清华大学水木社区的BBS的代号的界面。
在Kali虚拟机上开启Wireshark监听,且执行netwox 76 -i 192.168.173.67 -p 23。-i表示目的IP地址,-p表示目的端口号。这条命令表示针对192.168.173.67:23发起TCP SYN Flood攻击。
image
过了几分钟,在seed虚拟机上可以看到连接异常终止了,说明这次SYN Flood攻击取得了成功。
image
打开Kali的Wireshark,可以看到192.168.173.67收到了来自随机IP地址的大量TCP SYN请求,且192.168.173.67针对这些请求进行了RST=1的回复。此时Kali的Wireshark收到了五十多万个报文,都快崩溃了。
image

(4)TCP RST攻击

在seed虚拟机上输入luit -encoding gbk telnet bbs.mysmth.net 23。进入了清华大学水木社区的BBS的界面。
image
在Kali的Wireshark上,在IP地址为192.168.173.68的eth0接口开启监听,然后在Kali终端输入netwox 78 -i 192.168.173.67,-i表示目的IP地址。整条命令表示针对192.168.173.67开展TCP RST攻击。
image
随后,在seed虚拟机上再输入一个g,然后连接就中断了。
image
在Kali的Wireshark中可以看到使连接中断的原因是一个看似是120.92.212.76发出的RST报文,此报文实际是由Kali发出的。
image

(5)TCP会话劫持

在本实验任务中,我先让seed虚拟机通过telnet连接到metasploitable_ubuntu,然后Kali劫持这个会话。
首先,在Kali上用Wireshark在eth0端口开启监听,然后seed虚拟机通过telnet连接到metasploitable_ubuntu,并执行ps命令。
image
然后我要让Kali上冒充seed虚拟机向metasploitable_ubuntu的23号端口发送命令,这个命令被发送到metasploitable_ubuntu,且metasploitable_ubuntu回复了,就说明会话劫持成功。我要通过python编程实现构造数据包。要构造正确的数据包,需要知道要向数据包填入什么序列号和确认号。我打开Kali的Wireshark,看到seed虚拟机向metasploitable_ubuntu发送的最后一个数据包中的序列号为2394544232,该数据包的数据字段长度为2,所以我要构造的数据包中要填入的序列号应为2394544232+2=2394544234。
image
metasploitable_ubuntu向seed发送的最后一个数据包的序列号为1462905345,数据字段长度为27,因此我要填入到伪造的数据包中的确认号应为1462905345+27=1462905372。
image
编写能伪造数据包的python代码,Ether (src = '00:0C:29:7D:31:A5', dst = '00:0C:29:73:84:A3')表示构造源硬件地址=00:0C:29:7D:31:A5(seed虚拟机的硬件地址)、目的硬件地址=00:0C:29:73:84:A3(metasploitable_ubuntu虚拟机的硬件地址)的以太网帧首部。ip = IP (src = "192.168.173.67", dst = "192.168.173.114")表示构造源IP地址=192.168.173.67(seed虚拟机的IP地址)、目的IP地址=192.168.173.114(metasploitable_ubuntu虚拟机的IP地址)的IP数据报首部。tcp = TCP (sport = 54421, dport = 23, flags = "A", seq = 2394544234, ack = 1462905372)表示构造TCP首部,其中源端口、目的端口分别是54421、23。在标志字段设置ACK=1。设置序列号、确认号分别为2394544234、1462905372。Ik = "apt install ncat\x0D\x00"给出了报文的数据部分,这是一条指令,表示安装ncat这个软件。使用Telnet协议时,指令本身被发送完毕后要发送0x0D0x00两个字节。pkt0 = rJ / ip / tcp / Ik表示将以太网帧首部、IP数据报首部、TCP报文段首部、数据字段组合成完整的数据包。sendp (pkt0, iface = 'eth0', verbose = 0)表示将数据包从eth0端口发送出去。
image
在Kali终端输入python Tt.py并回车,将伪造的数据包发送出去。
image
打开Kali的Wireshark,可以发现一份源IP地址为192.168.173.67,目的IP地址为192.168.173.114的Telnet报文,携带的数据是apt install ncat,这就是Kali伪造出的报文。从Wireshark还可以看到192.168.173.114回复了,说明metasploitable_ubuntu虚拟机认可了我伪造的报文,向192.168.173.67发出了回复。
image
切换至seed虚拟机,我发现它的终端被锁定了,无法进行任何输入,这是会话劫持造成的结果。

3.学习中遇到的问题及解决

  • 问题1:seed虚拟机在遭遇ICMP重定向攻击后,无法解析任何域名,导致无法用它完成第三步实验任务,因为第三步实验任务需要连接到bbs.mysmth.net。
  • 问题1解决方案:重启seed_ubuntu虚拟机,即可消除之前的路由重定向攻击的影响,它就可以访问bbs.mysmth.net了。
  • 问题2:进行TCP SYN Flood攻击时,seed虚拟机上没有任何反应,且在Wireshark上用ip.addr == 192.168.173.68 && ip.addr == 192.168.173.67 && tcp.dstport == 23进行过滤得不到报文。其中192.168.173.68、192.168.173.67分别是Kali和seed虚拟机的IP地址。
  • 问题2解决方案:不要采用ip.addr == 192.168.173.68 && ip.addr == 192.168.173.67 && tcp.dstport == 23过滤,因为进行SYN Flood攻击时,Kali不会使用192.168.173.68这个IP地址,而是会用随机虚假IP地址。所以可以用ip.addr == 192.168.173.67 && tcp.dstport == 23过滤,也可以不过滤,因为进行TCP SYN Flood攻击时,Wireshark捕获的大部分报文都是和攻击有关的报文。seed虚拟机上要等待几分钟才能显示Connection closed,因为要经过几分钟的攻击,它的半开连接队列才能被填满。

4.实践总结

在本次实践中,让我感觉最难的步骤是TCP会话劫持。我看其他同学是用Ettercap完成这一部分的,但他们只是获取到了会话的数据、提取出了数据中的用户名和口令,并没有劫持会话。为了实现真正的会话劫持,我用python的scapy包编了一个python代码以实现发送劫持所需的数据包。然后我就实现了真的会话劫持──会话中一方被第三方假冒。虽然很麻烦,但是我这样做是严格遵循实验要求做实验。
本次实验使我体会到了TCP/IP协议栈是很不安全的,IP地址可以轻易地被假冒,在传输层可以有很多种攻击,ARP协议缺乏有效的认证机制。有了root权限和python,数据包的任何部分都可以被任意伪造。所以今天我们才有了TLS v1.3,能实现数据加密传输和双方身份验证,从而能避免很多网络攻击。

5.参考资料

posted @ 2026-04-04 20:57  三六三的病人  阅读(54)  评论(0)    收藏  举报