3-L2-VLAN跳跃-day10
VLAN跳跃
📑 文章目录
⚠️ 免责声明
本文旨在教学网络安全知识,帮助读者理解 VLAN 跳跃攻击的原理与防御方法。所有技术细节仅供学习、研究和安全测试(在合法授权范围内)使用。
严禁将本文所述技术用于任何非法攻击、入侵或破坏他人网络的行为。任何未经授权的网络攻击均属违法行为,将承担相应的法律责任。
网络安全从业者应遵守法律法规,仅在企业内部或获得明确授权的环境中进行安全测试。因滥用本文技术造成的一切后果,由使用者自行承担。
VLAN跳跃(VLAN Hopping)是一种二层网络攻击技术,攻击者无需经过三层路由,即可从自己所在的VLAN非法访问其他VLAN的网络资源。其核心是利用交换机处理VLAN标签(802.1Q)和动态中继协议(DTP)的设计缺陷,突破VLAN的隔离边界
1️⃣ Trunk(中继链路)——什么是 Trunk?
✅ 现实世界的类比
想象一栋大楼:
-
每个楼层是一个 VLAN
-
每层楼之间的房间不能直接互通
-
但大楼有一部 货梯,可以同时运送所有楼层的货物
👉 这部货梯,就是 Trunk
✅ 技术定义
Trunk 是一种物理链路,允许单个端口同时承载多个 VLAN 的流量。
| 端口类型 | 承载 VLAN 数量 | 典型连接对象 |
|---|---|---|
| Access | 1 个 | PC、打印机、摄像头 |
| Trunk | 多个 | 交换机 ↔ 交换机、交换机 ↔ 路由器、ESXi 服务器 |
✅ Trunk 的核心技术:802.1Q Tag
为了让 Trunk 知道“这个数据包属于哪个 VLAN”,以太网帧里会插入一个 VLAN Tag:
┌─────────┬────────────┬──────────┐
│ 目的MAC │ 802.1Q Tag │ 数据载荷 │
│ │ VLAN ID=20 │ │
└─────────┴────────────┴──────────┘
-
交换机收到帧 → 读 VLAN ID → 决定转发到哪个 VLAN
-
只有 Trunk 口才会处理这种 Tag
正常情况下的跨VLAN通信
一、核心结论
跨 VLAN 通信 = 必须借助三层设备(路由器或三层交换机)
Trunk = 只是让 VLAN 流量穿越链路的管道
-
Trunk 的作用:把 VLAN 1、VLAN 2、VLAN 3 的流量打包在一根网线上传输(通常用于交换机之间)。
-
路由的作用:决定 VLAN 1 的包怎么送到 VLAN 2(查路由表、改写 MAC 地址)。
二、拓扑一:单台交换机上的跨 VLAN 通信
这种情况发生在汇聚层或核心层交换机上,这台交换机既是二层交换机,又具备路由功能(三层交换机)。
1. 网络拓扑图
+-------------------------+
| 三层交换机 (SW1) |
| |
PC1 (VLAN 10) --------| Port 1 (Access VLAN 10) |
(192.168.10.10/24) | | <-- 内部集成路由器 (SVI)
PC2 (VLAN 20) --------| Port 2 (Access VLAN 20) |
(192.168.20.10/24) | |
| VLANIF 10: 192.168.10.1|
| VLANIF 20: 192.168.20.1|
+-------------------------+
关键组件:
-
SVI (Switched Virtual Interface):也就是图中的
VLANIF。这是三层交换机的灵魂。-
VLANIF 10是 VLAN 10 的网关(192.168.10.1)。 -
VLANIF 20是 VLAN 20 的网关(192.168.20.1)。
-
-
不需要 Trunk。因为两个 VLAN 都在同一台设备里,不需要把流量运到其他设备上。
2. 详细通信流程(PC1 → PC2)
假设 PC1(VLAN 10)想访问 PC2(VLAN 20)。
Step 1:PC1 发起请求
-
PC1 判断目标 IP(192.168.20.10)不在自己的网段(192.168.10.0/24)。
-
PC1 必须把包发给默认网关:192.168.10.1(VLANIF 10)。
Step 2:PC1 发包给网关
-
PC1 发起 ARP 请求,询问网关 192.168.10.1 的 MAC 地址。
-
PC1 发送数据帧:
-
源 IP: 192.168.10.10
-
目标 IP: 192.168.20.10
-
源 MAC: PC1 的 MAC
-
目标 MAC: VLANIF 10 的 MAC(网关 MAC)
-
-
PC1 发出的帧 不带 VLAN Tag。
Step 3:交换机接收并查表
-
交换机从 Port 1 收到帧,因为 Port 1 是 Access VLAN 10,交换机内部给帧打上 Tag: VLAN 10。
-
交换机查看目标 MAC 地址,发现是自己的
VLANIF 10接口。
Step 4:三层路由(关键转折点)
-
交换机意识到这是发给自己的流量,于是进行三层解封装(拆掉二层帧头)。
-
查看路由表:“去往 192.168.20.0/24 网段,出口是
VLANIF 20。” -
重新封装二层帧:
-
源 MAC: 改为
VLANIF 20的 MAC(新的网关 MAC) -
目标 MAC: 改为 PC2 的 MAC
-
VLAN Tag: 打上 Tag: VLAN 20
-
Step 5:转发给 PC2
-
交换机将数据帧从 Port 2 发出。
-
因为是 Access 口出方向,交换机剥离 VLAN Tag。
-
PC2 收到帧,以为是网关直接发给它的。
三、拓扑二:两台交换机间的 VLAN 通信(含跨 VLAN)
这是企业网最常见的架构。接入层是二层交换机,核心层是三层交换机。
1. 网络拓扑图
PC1 (VLAN 10) PC3 (VLAN 20)
| |
+----+----+ +----+----+
| Port 1 | | Port 1 |
| Access | | Access |
| VLAN 10 | | VLAN 20 |
| SW-A | | SW-A |
+----+----+ +----+----+
| Trunk (承载 VLAN 10, 20) |
| |
+----+--------------------------+----+
| Port 24 (Trunk) |
| 三层交换机 (SW-Core) |
| |
| VLANIF 10: 192.168.10.1 (GW) |
| VLANIF 20: 192.168.20.1 (GW) |
+-----------------------------------+
关键组件:
-
SW-A(接入交换机):纯粹的二层设备,只负责划分 VLAN。
-
SW-Core(核心交换机):三层设备,负责 VLAN 间路由。
-
Trunk 链路:连接 SW-A 和 SW-Core。因为它需要同时传输 VLAN 10 和 VLAN 20 的流量,所以必须配置为 Trunk。
2. 详细通信流程(PC1 → PC3)
假设 PC1(接在 SW-A 上,VLAN 10)想访问 PC3(接在 SW-A 上,VLAN 20)。
Step 1:PC1 发起请求
-
PC1 目标 IP 是 192.168.20.10,不在本网段。
-
PC1 发包给网关 192.168.10.1。
-
帧 不带 Tag。
Step 2:SW-A 处理(二层转发)
-
SW-A 从 Port 1 收到帧,打上 Tag: VLAN 10。
-
SW-A 查 MAC 地址表,发现目标 MAC(网关 MAC)在 Port 24(Trunk口)。
-
SW-A 保留 Tag,将帧从 Trunk 口发送给 SW-Core。
Step 3:SW-Core 接收并路由(三层转发)
-
SW-Core 从 Trunk 口收到带 Tag: VLAN 10 的帧。
-
发现目标 MAC 是自己
VLANIF 10的 MAC。 -
执行路由:
-
拆封二层帧头。
-
查路由表:去往 192.168.20.0/24,出口是
VLANIF 20。 -
重新封装:源 MAC 改为
VLANIF 20,目标 MAC 改为 PC3 的 MAC,打上 Tag: VLAN 20。
-
Step 4:SW-Core 发回 SW-A
-
SW-Core 查 MAC 表,发现 PC3 的 MAC 在 Trunk 口。
-
SW-Core 将带 Tag: VLAN 20 的帧从 Trunk 口发给 SW-A。
Step 5:SW-A 最终转发给 PC3
-
SW-A 收到带 Tag: VLAN 20 的帧。
-
查 VLAN 20 的 MAC 表,发现 PC3 在 Port 1。
-
SW-A 剥离 Tag,从 Port 1(Access VLAN 20)发出原始以太网帧。
-
PC3 收到数据。
![AI生成的图片
![[1.png]]
---](https://i-blog.csdnimg.cn/direct/fe325990b3e54e91976cc31a8e054164.png)
两种基础攻击手法
Switch Spoofing(交换机欺骗)
详细原理:交换机的接入端口默认可能开启DTP(动态中继协议),会自动和对端协商端口模式。攻击者将自身网卡的端口模式伪装成Trunk(中继)模式,通过DTP协商将原本的Access(接入)端口“忽悠”成Trunk端口。一旦协商成功,攻击者就能发送带有任意VLAN ID标签的数据帧,直接访问交换机上所有的VLAN
简单原理:
-
假设:交换机的端口默认是可以“协商”工作模式(DTP)的。
-
欺骗:攻击者告诉交换机:“我其实不是电脑,我是另一台交换机。”
-
得手:交换机信以为真,把连接攻击者的端口升级为 Trunk 模式。
-
越权:攻击者获得了向任何 VLAN 发包的能力。
什么是Trukn和DTP
Trunk(中继链路)——什么是“高速公路”?
在一个公司里,财务部(VLAN 1-10)和研发部(VLAN 11-20)是隔离的。如果有两个交换机,怎么保证交换机的A口(财务)和另一台交换机的A口(财务)互通?
-
Access口(普通门口,每个VLAN划分的端口):只能通行一个部门的人。比如连接你电脑的口,只允许财务部的VLAN通过。 一个access口连接一台电脑
-
Trunk口(高速公路):连接两台交换机的口。它允许多个部门的流量同时跑在这一条线上。为了区分流量是谁的,Trunk会给数据帧贴上“标签”(VLAN Tag)。
[财务部PC1] ----\
[财务部PC2] ----- [交换机A] ---(Trunk线)--- [交换机B] ----\
[财务部PC3] ----/ \-- [财务服务器]
(在 VLAN 10)
-
PC1、PC2、PC3 分别插在交换机 A 的 不同端口 上。
-
但这些端口都被配置成了 Access 模式,且都属于 VLAN 10。
-
交换机 A 和 B 之间只有一根线(Trunk口)。
-
当 PC1 发数据给财务服务器时:
-
数据从交换机 A 的 Access 口 进入,被打上 VLAN 10 的 Tag。
-
数据通过 Trunk 线 传到交换机 B。
-
交换机 B 看到 Tag 是 10,就把 Tag 去掉,从属于 VLAN 10 的 Access 口 转发出去,最终到达服务器
-
DTP(Cisco私有协议)
DTP(动态中继协议)是 Cisco 私有协议,作用是:
让两台交换机自动协商:我们的链路要不要变成 Trunk?
它不是 VLAN 功能本身,而是一个 “方便运维的自动化协议”。
✅ DTP 的四种端口模式
| 模式 | 行为 |
|---|---|
dynamic desirable | 主动发 DTP 报文,希望对方成为 Trunk |
dynamic auto | 不主动发,但如果对方想 Trunk,我就同意 |
trunk | 强制 Trunk |
access | 强制 Access(不发 DTP) |
⚠️ 出厂默认值(老设备):
- Cisco 交换机端口通常是
dynamic auto或dynamic desirable
✅ DTP 的致命信任模型
DTP 默认相信对端:
-
不验证对方是不是交换机
-
不验证对方身份
-
不验证对方权限
👉 只要你说“我想当 Trunk”,我就信
攻击发生时的拓扑与流程
现在,我们把攻击者放进这个网络里。
1. 拓扑变化
-
攻击者并没有改变物理连线。
-
攻击者只是接入了原本属于 VLAN 1 的一个普通端口(Access口)。
-
但是,通过攻击,这个端口在逻辑上变成了 Trunk 口。
2. 攻击的具体流程(Step-by-Step)
Step 1:侦察与准备
攻击者接入交换机端口。他发现该端口默认开启了 DTP 协商(很多思科设备默认如此)。
Step 2:发起 DTP 欺骗
攻击者运行工具(如 Yersinia),向交换机发送精心构造的 DTP 报文。
报文内容是:“我是邻居交换机,请求建立 Trunk 链路,我们使用 802.1Q 封装吧。”
Step 3:交换机上当(核心步骤)
交换机收到 DTP 报文,由于 DTP 协议没有认证机制,它毫不怀疑地回应:“好的,同意建立 Trunk。”
此时,连接攻击者的端口从 Access 模式切换成了 Trunk 模式。
Step 4:伪造 VLAN Tag 发包
既然拥有了 Trunk 权限,攻击者就可以随意构造数据包了。
-
他想访问服务器 VLAN(VLAN 2),就在数据包里手动加上 802.1Q Tag,VLAN ID = 2。
-
他想访问管理 VLAN(VLAN 3),就写上 VLAN ID = 3。
Step 5:跨 VLAN 通信达成
交换机收到攻击者的数据包:
-
看到里面有 VLAN 2 的 Tag。
-
交换机逻辑认为:“这是来自 Trunk 链路的合法流量,应该转发到 VLAN 2 里去。”
-
于是,数据包直接流向了原本隔离的服务器区(VLAN 2)。
最终结果:
攻击者不需要经过路由器,直接在二层就“跳”进了其他 VLAN。他可以扫描服务器、发起 ARP 欺骗,甚至配合后续的 LLMNR 投毒攻击,完全绕过了网络的分段隔离策略。
VLAN ID干嘛用的?
一、VLAN ID=3 是“目的地”还是“来源地”?
答案:都不是。它是“隶属关系标签”。
更准确的解释是:
VLAN Tag 表示的是:这个数据包“隶属于”哪个 VLAN,或者说,这个数据包“应该在哪个 VLAN 里广播/转发”。
让我们拆解一下一个完整的二层帧:
| 目的MAC | 源MAC | VLAN Tag (ID=3) | 数据 |
-
目的MAC:这才是真正的目的地(比如 VLAN 3 里某台服务器的网卡MAC)。
-
源MAC:这才是真正的来源地(发送方的MAC)。
-
VLAN Tag (ID=3):管辖域。它告诉交换机:“我是 VLAN 3 的人,请你在这个圈子里帮我找目的MAC。”
类比成快递:
-
MAC地址 = 具体的家庭住址(谁发的,发给谁)
-
VLAN ID = 小区名称(锦绣江南小区)
攻击者写上 VLAN ID=3,意思不是说“我要去3号房”,也不是说“我来自3号房”,而是说:“我是锦绣江南小区的人,请你在这个小区里帮我送快递。”
二、攻击者原来在 VLAN 1,现在端口变 Trunk,要发给 VLAN 2 怎么做?
这是整个攻击的精髓所在。我们分步骤来看:
1. 身份的转变(逻辑层面)
-
攻击前:攻击者的端口是 Access VLAN 1。
- 交换机逻辑:“不管这个端口发来的包长什么样,统统算作 VLAN 1 的。”
-
攻击后:攻击者的端口变成了 Trunk。
- 交换机逻辑变了:“这个端口发来的包,我看包里的 Tag 来决定它是哪个 VLAN 的。我不看端口默认配置了。”
结论:一旦变成 Trunk,攻击者原来的 VLAN 1 身份就作废了。现在的规则是“看 Tag 说话”。
2. 攻击者发给 VLAN 2 的具体操作
假设攻击者想把数据发给 VLAN 2 里的一台服务器(IP: 192.168.2.5, MAC: 00:11:22…)。
Step 1:构造“假的”二层帧
攻击者在自己的电脑上,用工具(如 Scapy)手动组装一个数据包:
-
目的MAC:填写 VLAN 2 那台服务器的 MAC 地址(
00:11:22...)。 -
源MAC:可以填攻击者自己的 MAC,也可以随便填(比如伪造一个 VLAN 2 里的 MAC)。
-
关键一步(加 Tag):在帧头里插入一个 802.1Q 的 Tag,明确写上
VLAN ID = 2。
Step 2:扔给交换机
攻击者把这个组装好的帧直接发出去。
Step 3:交换机的处理(核心)
交换机收到这个帧,处理逻辑如下:
-
“嗯?这个帧是从 Trunk 口进来的。”
-
“让我看看里面有没有 Tag……哦,看到了,
VLAN ID = 2。” -
“好的,我现在不看端口默认 VLAN 了,我严格按照 Tag 办事。”
-
“既然是 VLAN 2 的包,那我就去 VLAN 2 的广播域里找目的MAC。”
-
交换机查询 MAC 地址表,发现
00:11:22...在端口 12 上(假设端口12属于 VLAN 2)。 -
交换机将帧转发到端口 12。
结果:攻击者的数据包成功进入了 VLAN 2。
3. 一个重要的补充:单向性
这里有个细节:攻击者虽然能把包发进 VLAN 2,但如果 VLAN 2 的设备回复了,回复包里的 Tag 是由真正的 VLAN 2 的出口交换机端口决定的。
-
如果回复口是 Access 口,回复包不带 Tag,交换机收到后会归到端口默认的 VLAN(比如 VLAN 2)。
-
因为攻击者现在是 Trunk,他能收到 VLAN 2 的广播包。
-
但在复杂的网络里,如果回程路由不对,或者 VLAN 2 的端口也是 Trunk 且没有正确 Tag,回复可能无法回到攻击者手里。这也是为什么 Switch Spoofing 常配合 ARP 欺骗使用(攻击者先欺骗 VLAN 2 的设备,让它们以为攻击者的 MAC 是网关,这样回包就会乖乖带上正确的 Tag 回到 Trunk 口)
为什么可以跳过路由器直接转发帧?
先给结论
“跳过路由器”的本质是:攻击者发的帧是「二层单播/广播帧」,根本不会触发三层转发逻辑。
路由器的三层路由只处理“目的地是网关”的流量,而攻击者直接把帧的目的MAC写成目标主机的MAC,交换机按二层规则直接转发,路由器连碰都碰不到这个帧。
场景一:最常见的情况——一台交换机上同时存在多个VLAN
这是Switch Spoofing最典型的场景,也是“跳过路由器”最直观的情况。
拓扑设定
我们用一台三层交换机(同时承担二层交换+三层路由功能,企业内网最常见):
-
端口1-10:VLAN 1(办公区,网段192.168.1.0/24)
-
端口11-20:VLAN 2(服务器区,网段192.168.2.0/24)
-
三层交换机上配置了VLAN 1的SVI(网关:192.168.1.1)和VLAN 2的SVI(网关:192.168.2.1)
-
攻击者接入端口1(属于VLAN 1的Access口)
正常跨VLAN通信(必须过路由器)
VLAN 1的PC1(192.168.1.10)要访问VLAN 2的PC2(192.168.2.10):
-
PC1查自己的路由表,发现目标IP不在同网段,于是把帧的目的MAC设为网关192.168.1.1的MAC,发给三层交换机。
-
三层交换机的二层模块收到帧,发现目的MAC是本设备的SVI接口,于是把帧上交给三层路由模块。
-
路由模块查路由表,发现目标网段192.168.2.0/24对应VLAN 2的SVI,于是重新封装帧:源MAC改为192.168.2.1的MAC,目的MAC改为PC2的MAC,打上VLAN 2的Tag。
-
二层模块收到新帧,查VLAN 2的MAC表,转发给PC2。
👉 整个过程必须经过三层路由,路由器(三层模块)是必经之路。
攻击后“跳过路由器”的流程
攻击者把端口1骗成Trunk口后,直接构造帧:
-
目的MAC:直接写PC2的MAC(攻击者可以通过之前的ARP广播学到)
-
帧里手动插入
802.1Q Tag:VLAN 2 -
源IP可以是伪造的VLAN 2网段的IP
交换机收到这个帧后的处理逻辑:
-
帧是从Trunk口收到的,交换机无条件信任帧里的VLAN Tag,判定这个帧属于VLAN 2。
-
交换机查VLAN 2的MAC地址表,发现PC2的MAC对应端口12。
-
直接把帧从端口12转发出去,完全不会把帧交给三层路由模块。
👉 整个过程中,帧是二层帧,目的MAC是PC2不是网关,三层路由模块根本不会被触发,自然就“跳过了路由器”。
场景二:跨交换机的VLAN
这种情况的“跳过路由器”需要澄清一个常见误区:跨交换机的同VLAN通信不需要路由器,只有跨VLAN才需要。
拓扑设定
两台纯二层交换机(没有三层路由功能),通过路由器互联:
-
SW1:端口1-10属于VLAN 1,上联口24连路由器的子接口1(VLAN 1网关)
-
SW2:端口11-20属于VLAN 2,上联口24连路由器的子接口2(VLAN 2网关)
-
SW1和SW2之间没有直连Trunk,所有跨VLAN流量必须经过路由器。
正常情况(必须过路由器)
VLAN 1的PC1访问VLAN 2的PC2:
-
PC1发帧,目的MAC是路由器子接口1的MAC,带VLAN 1的Tag从SW1的24口发给路由器。
-
路由器做三层转发,换Tag为VLAN 2,从子接口2发给SW2。
-
SW2转发给PC2。
👉 必须经过路由器。
攻击后“跳过路由器”的前提与流程
这里的“跳过”需要满足一个条件:攻击者的交换机(SW1)已经学到了VLAN 2里PC2的MAC地址(比如之前PC2主动发过广播,SW1的MAC表缓存了PC2的MAC)。
攻击者把SW1的端口1骗成Trunk后,构造帧:
-
目的MAC:PC2的MAC
-
Tag:VLAN 2
SW1的处理逻辑:
-
收到Trunk口的帧,信任Tag,判定属于VLAN 2。
-
查VLAN 2的MAC表,发现PC2的MAC对应的出接口是24口(连路由器的口)。
-
把帧从24口发出去,带VLAN 2的Tag。
这时候会发生什么?
-
路由器收到帧,看到目的MAC是PC2的MAC,不是自己的子接口MAC,于是直接丢弃这个帧(路由器不会转发目的MAC不是自己的二层帧)。
-
而SW2的24口收到这个带VLAN 2 Tag的帧,查VLAN 2的MAC表,直接转发给PC2。
👉 路由器虽然收到了帧,但因为目的MAC不是自己,根本不会触发三层转发,相当于攻击者“穿”过了路由器,实现了跨VLAN通信。
感觉有点怪
-
总结
为什么能跳过路由器?记住两个铁律:
-
三层转发只触发于“帧的目的MAC是网关MAC”:普通PC访问跨网段主机时,会把目的MAC设为网关,所以必须过路由器;而攻击者直接把目的MAC设为目标主机的MAC,路由器根本不会被触发。
-
Trunk口的VLAN Tag优先级高于一切:交换机收到Trunk口的帧,只看帧里的Tag,不看端口本身的VLAN配置,也不管这个帧是不是“应该”走三层。
Double Tagging 一句话原理
攻击者发送一个携带两层 802.1Q Tag 的数据帧:
-
外层 Tag:填 Native VLAN(默认是 VLAN 1),交换机看到后,因为 Native VLAN 不打 Tag,会把它剥离。
-
内层 Tag:填目标 VLAN(比如 VLAN 20),交换机剥离外层后,看到了内层 Tag,以为是正常的 Trunk 流量,直接转发到目标 VLAN。
Native VLAN(本征 VLAN)
1. 什么是 Native VLAN?
在 Trunk 链路上,为了兼容不支持 VLAN 的老旧设备,有一个特殊的 VLAN 被称为 Native VLAN。
规则是:从 Trunk 口发出的 Native VLAN 流量,不打 802.1Q Tag;从 Trunk 口收到的不带 Tag 的流量,统统归为 Native VLAN。
2. 默认配置的风险
-
几乎所有 Cisco 交换机的默认 Native VLAN 是 VLAN 1。
-
很多时候,用户的 PC、打印机(Access VLAN 1)和交换机之间的 Trunk 链路(Native VLAN 1)使用的是同一个 VLAN。
这就制造了一个完美的条件:攻击者所在的 VLAN,恰好就是 Native VLAN。
攻击成立的前提
Double Tagging 不像 Switch Spoofing 那样通用,它必须满足三个硬性条件:
-
攻击者在 Native VLAN 里(通常是 VLAN 1)。
-
交换机之间的链路是 Trunk(这是企业网络的标配)。
-
Trunk 链路允许 Native VLAN 通过(默认允许)。
-
攻击者只能发起单向通信(因为回程流量无法自动带上双层 Tag)。
攻击流程详解
我们用一个经典拓扑来推演:
-
攻击者:接在 SW1 的端口1,属于 VLAN 1(Native VLAN)。
-
目标服务器:接在 SW2 的端口11,属于 VLAN 20(服务器区)。
-
SW1 和 SW2 之间:有一条 Trunk 链路,Native VLAN = 1。
Step 1:构造“俄罗斯套娃”式的帧
攻击者在自己的电脑上,利用 Scapy 或 Yersinia 构造一个特殊的数据帧:
┌──────────┬──────────┬──────────────┬──────────────┬──────────┐
│ 目的MAC │ 源MAC │ 外层 802.1Q │ 内层 802.1Q │ 数据 │
│ (广播) │ (攻击者) │ VLAN ID=1 │ VLAN ID=20 │ (载荷) │
└──────────┴──────────┴──────────────┴──────────────┴──────────┘
-
外层 Tag (VLAN 1):告诉第一台交换机“我是 VLAN 1 来的”。
-
内层 Tag (VLAN 20):藏着的真实目的地。
Step 2:帧进入第一台交换机(SW1)
攻击者把帧发出去。
-
SW1 收到帧,看到它有外层 Tag(VLAN 1)。
-
SW1 查 Trunk 配置,发现 VLAN 1 是 Native VLAN。
-
关键动作:SW1 遵循规则,将外层 Tag 剥离(Strip)。
-
此时,帧变成了:
[MAC][MAC][内层Tag:VLAN20][数据]。
Step 3:帧从 Trunk 口转发出去
SW1 要把这个帧发给 SW2。
- 因为它是在 Trunk 链路上转发,且内层 Tag 是 VLAN 20(非 Native VLAN),所以 SW1 保留内层 Tag,从 Trunk 口发出。
Step 4:第二台交换机(SW2)收到帧
SW2 从 Trunk 口收到这个帧。
-
SW2 解析帧头,发现了 802.1Q Tag,ID = 20。
-
SW2 完全不知道这个 Tag 是“夹层”产生的,它以为这是正常的跨交换机 VLAN 20 流量。
-
SW2 查 MAC 地址表,发现目标服务器的 MAC 在端口 11。
Step 5:注入目标 VLAN
SW2 将帧转发给端口 11。
-
端口 11 是 Access 口,收到帧后剥离 VLAN Tag。
-
服务器收到了来自攻击者(VLAN 1)的数据包,但它以为是来自 VLAN 20 内部的流量。
六、两种攻击方式对比总结
| 维度 | Switch Spoofing | Double Tagging |
|---|---|---|
| 利用漏洞 | DTP 协议信任 | Native VLAN 处理机制 |
| 是否需要 Trunk | 自己骗一个 | 必须已有 Trunk |
| 是否依赖 DTP | 是 | 否 |
| 通信方向 | 双向(全双工) | 单向为主(去程注入) |
| 攻击复杂度 | 低(工具一键化) | 中(需构造双层帧) |
| 适用场景 | 端口未固化 Access | 攻击者在 Native VLAN |
| 隐蔽性 | 较低(端口模式改变) | 极高(不改变配置) |
⚠️ 再次提醒
网络安全技术是一把双刃剑。掌握攻击原理是为了更好地防御,而非实施攻击。
- 合法使用:仅在拥有合法授权的环境中进行安全测试。
- 遵守法律:任何未经授权的网络入侵行为均属违法。
- 责任自负:因滥用本文所述技术导致的任何法律后果,由行为人自行承担。
请将知识用于正途,共同维护网络空间的安全。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)