VLAN跳跃

📑 文章目录


⚠️ 免责声明

本文旨在教学网络安全知识,帮助读者理解 VLAN 跳跃攻击的原理与防御方法。所有技术细节仅供学习、研究和安全测试(在合法授权范围内)使用。

严禁将本文所述技术用于任何非法攻击、入侵或破坏他人网络的行为。任何未经授权的网络攻击均属违法行为,将承担相应的法律责任。

网络安全从业者应遵守法律法规,仅在企业内部或获得明确授权的环境中进行安全测试。因滥用本文技术造成的一切后果,由使用者自行承担。

VLAN跳跃(VLAN Hopping)是一种二层网络攻击技术,攻击者无需经过三层路由,即可从自己所在的VLAN非法访问其他VLAN的网络资源。其核心是利用交换机处理VLAN标签(802.1Q)和动态中继协议(DTP)的设计缺陷,突破VLAN的隔离边界

1️⃣ Trunk(中继链路)——什么是 Trunk?

✅ 现实世界的类比

想象一栋大楼:

  • 每个楼层是一个 VLAN

  • 每层楼之间的房间不能直接互通

  • 但大楼有一部 货梯,可以同时运送所有楼层的货物

👉 这部货梯,就是 Trunk


✅ 技术定义

Trunk 是一种物理链路,允许单个端口同时承载多个 VLAN 的流量。

端口类型承载 VLAN 数量典型连接对象
Access1 个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]]
---

两种基础攻击手法

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)
  1. PC1、PC2、PC3​ 分别插在交换机 A 的 不同端口​ 上。

  2. 但这些端口都被配置成了 Access 模式,且都属于 VLAN 10

  3. 交换机 A 和 B 之间只有一根线(Trunk口)。

  4. 当 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 autodynamic 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:交换机的处理(核心)

交换机收到这个帧,处理逻辑如下:

  1. “嗯?这个帧是从 Trunk 口进来的。”

  2. “让我看看里面有没有 Tag……哦,看到了,VLAN ID = 2。”

  3. “好的,我现在不看端口默认 VLAN 了,我严格按照 Tag 办事。”

  4. “既然是 VLAN 2 的包,那我就去 VLAN 2 的广播域里找目的MAC。”

  5. 交换机查询 MAC 地址表,发现 00:11:22... 在端口 12 上(假设端口12属于 VLAN 2)。

  6. 交换机将帧转发到端口 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):

  1. PC1查自己的路由表,发现目标IP不在同网段,于是把帧的目的MAC设为网关192.168.1.1的MAC,发给三层交换机。

  2. 三层交换机的二层模块收到帧,发现目的MAC是本设备的SVI接口,于是把帧上交给三层路由模块

  3. 路由模块查路由表,发现目标网段192.168.2.0/24对应VLAN 2的SVI,于是重新封装帧:源MAC改为192.168.2.1的MAC,目的MAC改为PC2的MAC,打上VLAN 2的Tag。

  4. 二层模块收到新帧,查VLAN 2的MAC表,转发给PC2。

    👉 整个过程必须经过三层路由,路由器(三层模块)是必经之路。

攻击后“跳过路由器”的流程

攻击者把端口1骗成Trunk口后,直接构造帧:

  • 目的MAC:直接写PC2的MAC(攻击者可以通过之前的ARP广播学到)

  • 帧里手动插入802.1Q Tag:VLAN 2

  • 源IP可以是伪造的VLAN 2网段的IP

交换机收到这个帧后的处理逻辑:

  1. 帧是从Trunk口收到的,交换机无条件信任帧里的VLAN Tag,判定这个帧属于VLAN 2。

  2. 交换机查VLAN 2的MAC地址表,发现PC2的MAC对应端口12。

  3. 直接把帧从端口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:

  1. PC1发帧,目的MAC是路由器子接口1的MAC,带VLAN 1的Tag从SW1的24口发给路由器。

  2. 路由器做三层转发,换Tag为VLAN 2,从子接口2发给SW2。

  3. SW2转发给PC2。

    👉 必须经过路由器。

攻击后“跳过路由器”的前提与流程

这里的“跳过”需要满足一个条件:攻击者的交换机(SW1)已经学到了VLAN 2里PC2的MAC地址(比如之前PC2主动发过广播,SW1的MAC表缓存了PC2的MAC)。

攻击者把SW1的端口1骗成Trunk后,构造帧:

  • 目的MAC:PC2的MAC

  • Tag:VLAN 2

SW1的处理逻辑:

  1. 收到Trunk口的帧,信任Tag,判定属于VLAN 2。

  2. 查VLAN 2的MAC表,发现PC2的MAC对应的出接口是24口(连路由器的口)。

  3. 把帧从24口发出去,带VLAN 2的Tag。

    这时候会发生什么?

    • 路由器收到帧,看到目的MAC是PC2的MAC,不是自己的子接口MAC,于是直接丢弃这个帧(路由器不会转发目的MAC不是自己的二层帧)。

    • 而SW2的24口收到这个带VLAN 2 Tag的帧,查VLAN 2的MAC表,直接转发给PC2。

      👉 路由器虽然收到了帧,但因为目的MAC不是自己,根本不会触发三层转发,相当于攻击者“穿”过了路由器,实现了跨VLAN通信。

    感觉有点怪


总结

为什么能跳过路由器?记住两个铁律:

  1. 三层转发只触发于“帧的目的MAC是网关MAC”:普通PC访问跨网段主机时,会把目的MAC设为网关,所以必须过路由器;而攻击者直接把目的MAC设为目标主机的MAC,路由器根本不会被触发。

  2. Trunk口的VLAN Tag优先级高于一切:交换机收到Trunk口的帧,只看帧里的Tag,不看端口本身的VLAN配置,也不管这个帧是不是“应该”走三层。

Double Tagging 一句话原理

攻击者发送一个携带两层 802.1Q Tag 的数据帧

  1. 外层 Tag:填 Native VLAN(默认是 VLAN 1),交换机看到后,因为 Native VLAN 不打 Tag,会把它剥离

  2. 内层 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 那样通用,它必须满足三个硬性条件:

  1. 攻击者在 Native VLAN 里(通常是 VLAN 1)。

  2. 交换机之间的链路是 Trunk(这是企业网络的标配)。

  3. Trunk 链路允许 Native VLAN 通过(默认允许)。

  4. 攻击者只能发起单向通信(因为回程流量无法自动带上双层 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 SpoofingDouble Tagging
利用漏洞DTP 协议信任Native VLAN 处理机制
是否需要 Trunk自己骗一个必须已有 Trunk
是否依赖 DTP
通信方向双向(全双工)单向为主(去程注入)
攻击复杂度低(工具一键化)中(需构造双层帧)
适用场景端口未固化 Access攻击者在 Native VLAN
隐蔽性较低(端口模式改变)极高(不改变配置)

⚠️ 再次提醒

网络安全技术是一把双刃剑。掌握攻击原理是为了更好地防御,而非实施攻击。

  • 合法使用:仅在拥有合法授权的环境中进行安全测试。
  • 遵守法律:任何未经授权的网络入侵行为均属违法。
  • 责任自负:因滥用本文所述技术导致的任何法律后果,由行为人自行承担。

请将知识用于正途,共同维护网络空间的安全。


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐