20253907 2025-2026-2《网络攻防实践》第4周作业
1. 实践内容总结
本次实验围绕TCP/IP协议栈中的典型安全缺陷与攻击利用机制展开,核心内容不再停留于“看见流量”或“识别漏洞”,而是进一步进入“主动构造报文、干扰通信路径、破坏连接状态并尝试接管会话”的层面。若把整个课程前几次实验串联起来看,本次实验可以被理解为:在已经具备实验环境、资产认知与流量分析能力的基础上,进一步验证协议本身为什么会被利用、攻击为什么能够成功、攻击链条是如何逐步展开的。
从知识结构上看,本次实验主要涉及三个层面的内容:
- 链路层与网络层的路径操控:如ARP欺骗、ICMP重定向;
- 传输层的连接破坏与资源消耗:如SYN Flood、TCP RST;
- 基于状态同步的主动会话接管:如TCP会话劫持与命令注入。
也就是说,本次实验不仅是在“攻击某个服务”,更是在验证:当协议缺乏身份认证、完整性校验或状态保护时,攻击者如何从底层逐步控制通信路径与会话内容。
1.1 TCP/IP协议栈安全问题的基本认识
TCP/IP协议簇最初的设计目标更偏向于“互联互通、鲁棒传输、容错恢复”,而不是“默认安全”。这就导致在很多早期协议设计中,系统默认相信网络中的其他节点是“基本可信”的,或者至少不会主动伪造关键控制信息。正因为这种设计背景,攻击者往往可以利用以下几类缺陷:
- 缺乏身份认证:主机默认接受ARP应答、ICMP控制报文等,不验证来源是否合法;
- 缺乏完整性保护:报文在链路中被伪造或篡改后,接收方难以识别其真实性;
- 连接状态可被利用:TCP的三次握手、序列号和确认号机制一旦被攻击者掌握,就可能被用于会话破坏或注入;
- 应用层明文传输放大风险:如果上层协议本身不加密(如Telnet、FTP),那么下层一旦被劫持,攻击面会进一步扩大。
因此,本次实验的关键收获不是记住几个工具名称,而是理解:协议功能与协议脆弱性往往是一体两面的。一个为了提高效率而设计的机制,如果缺少验证,就可能反过来成为攻击入口。
1.2 ARP、ICMP与TCP的安全意义
(1)ARP协议与链路层信任问题
ARP(Address Resolution Protocol)负责在局域网中完成IP地址到MAC地址的映射。它的安全问题在于:
- ARP本身是无状态协议,不维护请求-应答的对应关系;
- 主机通常会无条件接受未经请求的ARP应答;
- 收到新的ARP Reply后,会直接覆盖本地ARP缓存中的已有条目。
这意味着,攻击者不需要真正拥有某个IP地址,只需要向局域网中的其他主机发送伪造应答,就可以让对方误以为“某个合法IP对应的MAC是攻击者自己的MAC”。从攻防角度看,这相当于在链路层篡改了“通信对象是谁”这一最基础的事实。
(2)ICMP协议与路由控制问题
ICMP(Internet Control Message Protocol)除了用于ping、差错报告,还承担了诸如ICMP Redirect这类控制功能。ICMP Redirect的本意是让网关通知主机:“你去某个目标时可以走一个更优的下一跳。”
但若攻击者伪造该类报文,就可能让受害主机误以为:
- 新的网关更优;
- 原默认路由不再是最佳路径;
- 某些流量应该先交给攻击者转发。
于是,攻击者就能在不改变物理网络拓扑的情况下,间接控制受害主机的通信路径。这个问题说明:控制类报文一旦缺少来源认证,就可能导致主机的路由决策被操控。
(3)TCP协议与状态同步问题
TCP的可靠性来自它的连接状态管理机制,包括:
- 三次握手建立连接;
- 序列号(Sequence Number)与确认号(Acknowledgment Number)维持有序传输;
- 窗口机制保证流量控制;
- RST标志位允许异常终止连接。
这些机制为正常通信提供了基础,但也带来了几个典型攻击点:
- SYN Flood:滥用半连接状态,消耗服务端资源;
- TCP RST:伪造复位报文,强制断开合法会话;
- TCP Session Hijacking:在掌握会话状态后注入伪造数据,冒充合法一方执行命令。
换句话说,TCP的安全问题并不在于“它不可靠”,恰恰相反,正因为它非常依赖状态同步与报文合法性假设,所以一旦攻击者能够观察并伪造这些状态信息,破坏力就会很强。
1.3 本次实验涉及的五类攻击与作用
本次实验包含五类典型攻击,它们从链路层到传输层构成了一条较清晰的逻辑链路:
| 攻击类型 | 核心目标 | 攻击层面 |
|---|---|---|
| ARP缓存欺骗 | 解决“如何让流量先经过攻击者” | 链路层 |
| ICMP重定向 | 解决“如何影响主机路由决策与下一跳选择” | 网络层 |
| SYN Flood | 基于协议状态资源占用的拒绝服务 | 传输层 |
| TCP RST | 对现有连接的破坏与中断 | 传输层 |
| TCP会话劫持 | 从监听、状态同步到命令注入、会话接管 | 传输层/应用层 |
如果从安全目标角度理解:
- ARP欺骗、ICMP重定向主要影响机密性与完整性;
- SYN Flood、TCP RST主要影响可用性;
- TCP会话劫持则同时影响机密性、完整性与控制权。
这也是本次实验的一个重要意义:它不是单点攻击演示,而是让我们看到CIA三元组在真实协议利用中的具体体现。
1.4 与第二次作业、第三次作业之间的联系
(1)与第二次作业的联系:从“识别攻击面”到“利用协议面”
第二次作业的重点是网络信息收集、资产识别、主机服务探测和漏洞评估,主要回答的问题包括:
- 目标有哪些主机与服务;
- 开放了哪些TCP/UDP端口;
- 运行了哪些组件;
- 哪些端口和服务存在潜在安全风险。
换句话说,第二次作业更偏向攻击面发现(Attack Surface Discovery) 与风险定位(Risk Identification)。而本次第四次实验则是在此基础上,进一步回答:
- 当目标服务和协议已经暴露后,攻击者如何从协议层实施干扰和利用;
- 某些风险为什么不仅存在于“应用漏洞”,也存在于“协议机制本身”;
- 即使没有Web漏洞,是否仍然可以通过链路层和传输层手段破坏或控制通信。
因此,第二次作业解决的是“目标有什么面”,第四次实验解决的是“这些面为什么能被用来发起主动攻击”。
(2)与第三次作业的联系:从“被动取证”到“主动构造”
第三次作业主要围绕网络嗅探、协议分析与流量取证展开,重点在于:
- 用tcpdump和Wireshark看清通信过程;
- 理解TCP、HTTP、TELNET、ICMP、UDP等协议行为;
- 从pcap文件中识别攻击源、目标、扫描方法与系统特征。
也就是说,第三次作业更偏向被动观察(Passive Observation) 与取证还原(Traffic Forensics)。而本次第四次实验则更进一步,转向:
- 主动伪造ARP、ICMP、TCP报文;
- 主动破坏现有通信状态;
- 主动插入和构造会话数据;
- 从“看见攻击”变成“理解并复现攻击”。
如果说第三次作业是在流量层面回答“攻击者做了什么”,那么第四次实验就是在实验环境中回答“这些攻击具体是怎么做到的”。
(3)三次作业的连续实践链路
将第二次、第三次与本次第四次实验连起来,可以形成一条较完整的课程实践脉络:
| 作业次序 | 核心主题 | 能力层次 |
|---|---|---|
| 第二次 | 信息收集与漏洞评估 | 发现目标与风险 |
| 第三次 | 网络嗅探、协议分析与流量取证 | 观察流量与证据 |
| 第四次 | 协议缺陷利用、连接破坏与会话接管 | 理解并复现攻击机制 |
对应的能力层次可以概括为:
先发现目标与风险 → 再观察流量与证据 → 最后理解攻击为何能够成功
这说明课程的训练路径是在逐步向底层深入:从“知道目标有什么”,到“看清网络里发生了什么”,再到“理解攻击为什么能成功”。
1.5 知识拓扑图
下图对本次实验涉及的知识体系进行了结构化整理,梳理了从基础协议到攻击类型再到防御措施的映射关系:

1.6 本次实验的定位与价值
综合来看,本次实验在课程体系中的定位可以概括为:
从“观察者”到“参与者”的转折点。
前三次实验帮助我们建立了环境、学会了搜集信息和观察流量,而第四次实验则第一次要求我们亲自构造攻击报文、亲自改变通信路径、亲自接管会话控制权。这种从被动到主动的转变,让我们对协议安全的脆弱性有了更真切的体会。
最终,本次实验让我们认识到一个核心事实:网络协议的安全不是一个“有或无”的问题,而是一个“认证与信任”的平衡问题。当协议设计时对信任的假设过于宽泛,攻击者就可以通过构造合法格式的恶意报文,在不触发告警的情况下完成攻击。这也解释了为什么在真实的网络安全工作中,协议层面的防护往往比应用层面的修复更困难、也更根本。
2. 实践过程
2.1 ARP 缓存欺骗攻击
攻击目标:使同一网段内的受害主机(SEED Ubuntu,192.168.200.7)错误地将网关 IP 对应到 Kali 的 MAC 地址,实现中间人攻击。
操作步骤:
-
在 Kali 中启用 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
-
我们可以查看网关 IP(VMnet8 的 NAT 网关为 192.168.200.1)。
-
使用 arpspoof 工具进行 ARP 欺骗,欺骗 SEED 虚拟机:
# 欺骗 SEED,告诉它网关的 MAC 是 Kali 的 MAC arpspoof -i eth0 -t 192.168.200.7 192.168.200.1
-
这个时候,再另开一个终端,欺骗网关,告诉它 SEED 的 MAC 是 Kali 的 MAC:
arpspoof -i eth0 -t 192.168.200.1 192.168.200.7
-
保持两个终端运行,在 SEED 上查看 ARP 缓存:
arp -n可以看到网关 IP 对应的 MAC 地址变成了 Kali 的 MAC(00:0c:29:e2:8e:48)。

-
此时从 SEED ping 外部,流量先经过 Kali,再由 Kali 转发,Kali 可以使用 tcpdump 监控流量:
sudo tcpdump -i eth0 icmp
攻击原理:ARP 协议没有身份验证机制,任何主机都可以发送 ARP 响应。攻击者伪造网关的 ARP 响应发送给受害主机,使受害主机更新其 ARP 表,将网关 IP 映射到攻击者的 MAC。同时攻击者也欺骗网关,实现双向拦截。
2.3 ICMP 重定向攻击
2.3 ICMP 重定向攻击(使用 netwox)
实验环境
| 虚拟机 | 角色 | IP 地址 |
|---|---|---|
| Kali | 攻击机 | 192.168.200.6 |
| SEED Ubuntu | 受害机 | 192.168.200.7 |
| 网关 | VMnet8 NAT 网关 | 192.168.200.1 |
步骤1:在 SEED 上查看初始路由表
在 SEED Ubuntu 中执行:
route -n

记录初始路由表,特别是默认网关 192.168.200.1。
步骤2:在 SEED 上开启接受 ICMP 重定向(重要)
Linux 默认忽略 ICMP 重定向,需要手动开启:
sudo sysctl -w net.ipv4.conf.all.accept_redirects=1
sudo sysctl -w net.ipv4.conf.eth6.accept_redirects=1

步骤3:在 Kali 上执行 netwox 86 命令
netwox 86 是 netwox 工具包中用于发送 ICMP 重定向报文的命令。
在 Kali 中执行:
sudo netwox 86 -f "host 192.168.200.7" -g 192.168.200.6 -i 192.168.200.1
步骤4:在 SEED 上触发重定向
让 SEED 对外发送一个数据包,触发 ICMP 重定向。例如:
ping baidu.com

攻击原理:ICMP 重定向报文用于告诉主机使用更优的路由路径。攻击者伪造网关发送的重定向报文,使受害主机将发往特定目标的数据包转向攻击者指定的路由,从而实现流量劫持。
2.4 SYN Flood 攻击
攻击目标:向 Metasploitable 靶机(192.168.200.130)发送大量 SYN 请求,耗尽半连接队列。
操作步骤:
-
使用 hping3 工具发起 SYN Flood 攻击:
sudo hping3 -S -p 80 --flood 192.168.200.130
-
在攻击期间,在Metasploitable 另开终端用 netstat 查看靶机半连接状态(需要在靶机上执行):
sudo netstat -ant | grep SYN | wc -l可以看到半连接数不断增加,并且一开始没有攻击的时候是0。

-
在 Kali 上尝试正常访问靶机的 HTTP 服务,可能响应缓慢:
curl -m 5 http://192.168.200.130
攻击原理:TCP 三次握手中,服务器收到 SYN 后会分配资源并回复 SYN+ACK,等待客户端的 ACK。攻击者发送大量伪造源 IP 的 SYN 包,使服务器不断等待,耗尽半连接队列资源,导致无法接受新的正常连接。
2.5 TCP RST 攻击
| 虚拟机 | 角色 | IP 地址 |
|---|---|---|
| Kali | 攻击机 | 192.168.200.6 |
| Metasploitable | 靶机 | 192.168.200.130 |
步骤1:从 Kali 连接 Metasploitable 的 Telnet
先在 Kali 上正常连接靶机,确认服务可用:
telnet 192.168.200.130

步骤2:使用 netwox 78 发起 TCP RST 攻击
在 Kali 的新终端中执行:
sudo netwox 78 -i 192.168.200.130

步骤3:测试攻击效果
再次尝试连接 Metasploitable 的 Telnet:
在 Kali 上另开一个终端(或关闭之前的连接重新连):
telnet 192.168.200.130

连接失败
步骤4:抓包验证 RST 包
在 Kali 上启动 Wireshark 抓包(另开一个终端):
sudo wireshark &
选择网卡:选择 eth0(VMnet8)
过滤器:输入 host 192.168.200.130
开始抓包后,在另一个终端尝试 telnet 192.168.200.130

在 Wireshark 中过滤 RST 包:
tcp.flags.reset == 1

- 发送后,原 telnet 会话立即断开,显示连接被重置。
攻击原理:TCP 协议规定,收到 RST 标志位的包后应立即关闭连接。攻击者通过伪造目标连接中一方 IP 和端口的 RST 包,并填入正确的序列号,可以强制中断合法的 TCP 连接。
2.6 TCP 会话劫持攻击
操作步骤:
-
首先在 Kali 命令行中输入 ettercap -G,以图形化方式打开工具。

-
点击右上角对勾开启捕获:

-
扫描 hosts 后选择其他两个靶机(seed和winxp)作为 Target1 和 Target2:

-
启动 ARP 投毒攻击
点击菜单栏 MITM → ARP poisoning。
在弹出的窗口中:勾选 “Sniff remote connections”(嗅探远程连接)
此时 Ettercap 开始对 Target1 和 Target2 进行 ARP 欺骗,两者的流量都会经过 Kali。


-
在 WinXPattacker 上发起 Telnet 连接
telnet 192.168.200.7

-
在 Ettercap 中查看捕获的数据
回到 Kali 的 Ettercap 界面,点击 View → Connections

在kali里面可以看到自己输入的内容

7. 使用 Wireshark 验证

攻击原理:TCP 会话劫持的关键在于预测或获取正确的序列号。如果攻击者能够得知通信双方的序列号,就可以伪造数据包注入到会话中,使接收方误以为是合法数据。在明文的 telnet 连接中,攻击者可以轻易获取序列号,从而执行任意命令。
3. 学习中遇到的问题及解决
-
问题1:在seed上输入arp -n,找不到被篡改的ARP表
解决方案:清空 ARP 缓存再查看即可成功。

-
问题2:在 WinXPattacker 上发起 Telnet 连接失败
解决方案:在SEED上开启telnet服务,sudo service openbsd-inetd start
4. 学习感悟
如果说前面的实验都是对网络攻防基础知识的补充,那么这次实验才是真正的网络攻防实验,让我真正学习到了真正的网络攻防当中常见的攻击的几种方式,并且每种方式都有自己的特点,在不同情况下采取不同的攻击往往才是攻击成功的关键,这些攻击都是利用 TCP/IP 协议设计时没考虑安全性的缺陷。
同时这次实验也激发自主学习的兴趣,了解并尝试了land攻击以及小丑攻击。
当然,通过本次实验,我主要对 TCP/IP 协议栈的安全漏洞有了更深刻的理解,有以下三点:
1、ARP 缓存欺骗让我认识到 ARP 协议的设计缺陷,任何主机都可以随意伪造 ARP 响应。这种攻击在局域网中非常隐蔽,防御需要静态 ARP 表或 ARP 检测工具。
2、ICMP 重定向攻击揭示了 ICMP 协议的潜在风险,虽然现代操作系统默认限制了重定向功能,但在配置不当的环境中仍然存在威胁。
3、TCP 会话劫持攻击让我直观感受到明文网络通信的危险性。使用 telnet、ftp 等明文协议时,攻击者可以轻易截获并注入任意数据。这也是为什么 SSH、HTTPS 等加密协议成为主流的原因。
浙公网安备 33010602011771号