VLAN渗透-跳跃攻击

发布于 26 天前  65 次阅读


VLAN渗透

VLAN介绍

VLAN前置概念

碰撞域,广播域,广播风暴:

  • 碰撞域:使用集线器连接而成的以太网是一个碰撞域,即收到的所有以太网数据帧会被集线器无脑广播到网络中除接收口以外的每个端口,原因是集线器工作在物理层,没有识别上层数据链路层的以太网数据帧 (包含了 MAC 地址) 结构的能力。
  • 广播域:使用交换机连接而成的以太网是一个广播域,即收到的以太网广播帧会被交换机转发到除接收口以外的每个端口,原因是交换机工作在数据链路层,具有识别 MAC 地址的能力,因此不会和集线器一样将单播帧也广播出去。
  • 广播风暴:同一个网络中由于充斥着大量的广播信息 而导致占用网络带宽使正常网络信号无法流通。出现广播风暴后只能拔网线或将交换机断电,因为交换机工作在数据链路层,而数据链路层协议并没有数据帧最大生存时间 (TTL) 相关协议,因此路由环路的出现,就会使广播帧永久保留在环路中,使得交换机不断重复广播,造成网络拥塞。网络中最常使用广播帧的协议有 ARP, DHCP, IPX/SPX 等。

路由器隔离广播域,交换机隔离碰撞域:

  • 通常为了扩展以太网的范围,会将多台交换机互连 (扩大了广播域), 然而交换机只能隔离碰撞域,因此当广播域过大时,更容易造成广播风暴,为此需要分割广播域。使用路由器就可以将一个广播域分割成两个较小的广播域,因为路由器工作在网络体系结构的第三层 (网络层), 默认情况下不对广播数据包进行转发,因此路由器很自然地就可以隔离广播域。但问题是路由器的成本很高

VLAN 引入的新内容

虚拟局域网 VLAN (Virtual Local Area Network) 是一种将局域网内的设备划分成与物理位置无关 (同一个 VLAN 下的设备可以连接在不同的交换机上) 的逻辑组的技术,这些逻辑组具有某些共同的需求 (比如为同一个部门)。

VLAN 要求交换机实现两大功能,一个是能够处理带有 VLAN 标记的帧 , 也就是 IEEEE 802.1Q 帧。另一个是交换机的各端口可支持不同的接口类型。不同接口类型的端口对帧的处理方式有所不同。

802.1Q 帧

802.1Q 帧也称为 Dot One Q 帧,是在以太网 MAC 帧格式进行了扩展,插入了 4 字节的 VLAN 标记:

alt text

802.1Q 帧格式详解:https://www.cnblogs.com/mutudou/p/14244640.html

重点

  1. VLAN 标记的最后 12 比特称为 VLAN 标识符 ID (VID), 它唯一的标志了以太网帧属于哪一个 VLAN。
    • VID 的范围是 0 ~ 4095 (0 ~ 2^12-1)
    • 0 和 4095 都不用来表示 VLAN, 因此表示 VLAN 的 VID 的有效取值范围是 1 ~ 4094。
  2. 802.1Q 帧是由交换机来处理的,而不是由用户主机来处理的。
    • 当交换机收到普通的以太网帧时,会将其插入 4 字节的 VLAN 标记转变为 802.1Q 帧,简称打标签.
    • 当交换机转发 802.1Q 帧时,可能会删除其 4 字节 VLAN 标记转变为普通以太网帧 (取决于端口的 PVID 与 802.1Q 帧的 VID 是否相同,相同则去标签转发,否则直接转发), 简称去标签.

交换机接口类型

交换机的接口类型有三种:

  1. Access (访问)
  2. Trunk (中继)
  3. Hybrid (混合)

三种类型中,Hybrid 接口类型是由华为公司开发的,而思科交换机并不支持 Hybrid 类型。

在介绍这三种交换机接口类型之前,首先要了解一下端口的缺省 VLAN ID 这个概念:

  • 缺省 VLAN ID 是指在交换机上电启动时,未经配置的接口所自动分配的 VLAN (通常是 VLAN 1)。

  • 对于思科交换机,接口的缺省 VLAN ID 称为本征 VLAN(Native VLAN);思科交换机在用户未配置 VLAN 时,所有端口都默认属于 VLAN 1, 即所有端口的本征 VLAN 的值都是 1。

  • 对于华为交换机,接口的缺省 VLAN ID 称为端口 VLAN ID (Port VLAN ID),简称为 PVID。华为交换机在用户未配置 VLAN 时,所有端口都默认属于 VLAN 1, 即所有端口的 PVID 值都是 1。

  • 为简单起见,下面将统一使用 PVID 来表示端口的缺省 VLAN ID。

    其中,“Link Type”表示接口的接口类型,“PVID”表示接口上的缺省VLAN,“Trunk VLAN List”表示Trunk接口上允许通过的VLAN列表,或Hybrid接口上以Tagged方式加入的VLAN。如果接口类型是Access,或Hybrid接口没有以Tagged方式加入VLAN,该处显示“-”

Access 端口

  1. Access 端口一般用于连接用户计算机。
  2. 思科交换机所有端口的默认接口类型就是 Access。
  3. Access 端口只能属于一个 VLAN。
  4. Access 端口的 PVID 值与端口所属 VLAN 的 ID 相同 (默认为 1)。
  5. Access 端口接收帧处理方法:一般只接受未打标签的普通以太网 MAC 帧,根据接收帧的接口的 PVID 给帧打标签 , 即插入 4 字节的 VLAN 标签字段, VLAN 标签字段中的 VID 取值就是接口的 PVID 值
  6. Access 端口转发帧处理方法:若帧中的 VID 值与接口的 PVID 值相等,则给帧去标签转发 , 否则不转发帧。因此从 Access 接口转发出的帧,是不带 VLAN 标签的普通以太网 MAC 帧。
数据方向 发生了什么 标签状态
电脑 → 交换机 电脑发出无标签的普通帧 → 进入交换机端口 → 交换机根据端口PVID(例如20)打上VLAN 20标签 无标签 → 有标签
交换机 → 电脑 交换机内部带有VLAN 20标签的帧 → 准备从端口发出 → 交换机剥离VLAN 20标签 → 电脑收到无标签的普通帧 有标签 → 无标签

Trunk 端口

  1. Trunk 端口一般用于交换机之间或交换机与路由器之间的互连。
  2. Trunk 端口可以属于多个 VLAN, 也就是说 Trunk 端口可以接收和发送属于不同 VLAN 的帧。
  3. Trunk 端口的默认 PVID 值是 1(兼容性考虑)。通常不建议用户更改这个值,因为如果两个互连的 Trunk 接口的 PVID 值不同,数据传输可能会出错。
  4. Trunk 端口接收帧处理方法:既可以接收未打标签的普通以太网 MAC 帧,也可以接收已打标签的 802.1Q 帧。若接收到普通以太网 MAC 帧时,根据接收帧的接口的 PVID 给帧打标签,这与 Access 接口的处理相同,即插入 4 字节的 VLAN 标签字段,VLAN 标签字段中的 VID 取值就是接口的 PVID 值。
  5. Trunk 端口转发帧处理方法:对于 VID 值等于接口的 PVID 值的 802.1Q 帧,将其去标签转发 ; 对于 VID 值不等于接口的 PVID 值 802.1Q 帧,将其直接转发 (Access 接口则直接丢弃)。因此,从 Trunk 接口转发出的帧,可能是普通以太网 MAC 帧也可能是 802.1Q 帧

Hybrid 端口

Hybrid 接口是华为开发出的交换机接口类型。Hybrid 接口既可以用于交换机之间的互连 (与 Trunk 接口相同), 也可用于交换机与用户计算机之间的互连 (与 Access 接口相同), 除此之外,Hybrid 接口的绝大部分功能与 Trunk 接口相同。不同点在于 Hybrid 接口的转发处理: Hybrid 接口会查看帧的 VID 值是否在接口的去标签列表中,若存在则 “去标签” 后转发,若不存在则直接转发。

华为交换机所有端口的默认接口类型就是 Hybrid。

PVID测试

缺省状态下,所有的端口都在vlan 1中,所有的端口的PVID标识缺省都为1

image-20260429101846399
image-20260429102311692

对接口进行如下配置后查看相应配置:

vlan batch 20 30 40 # 批量创建VLAN  

interface GE 1/0/0
 port link- type trunk
 port trunk pvid vlan 20
 port trunk allow-pass vlan 20 30 40

interface GE 1/0/2
 port link-type access
 port default vlan 20

interface GE 1/0/3
 port link-type access
 port default vlan 30

interface GE 1/0/4
 port link-type access
 port default vlan 40

image-20260429104345151

可见配置完 access 类 型的接口后,该端口缺省PVID由原来的1变成了配置的所属vlan的Vlan ID,命令port trunk pvid vlan 20,配置完Trunk类型的接口,如果手动指定该端口的PVID,则trunk端口的PVID将由原来的PVID=1变成手动配置指定的PVID=20

image-20260429104558849
image-20260429105728187

上图可以发现端口的PVID属性一直存在,不管配置或者未配置PVID都存在,trunk类型的接口下,端口可以有多个vlan,如上面截图中,Trunk link list 列表是1、20、30、40这几个VLan,PVID通过配置可以改变,但是一个端口有且仅有一个PVID

特别需要注意这个全局vlan 1,默认情况下,trunk端口都是允许vlan 1通过的,除非禁止vlan 1通过,配置命令如下: undo port trunk allow-pass vlan1对1/0/1接口输入这条命令后产生如下效果

image-20260429110236425

对1/0/0接口输入这条命令后产生如下效果:

image-20260429110434854

注意以下两个特征,

  • UT(Untagged):表示该 VLAN 的数据从这个端口发出时会剥离标签。Access 端口和 Hybrid 端口(部分配置下)通常显示为 UT。
  • TG(Tagged):表示该 VLAN 的数据从这个端口发出时会携带标签。这是 Trunk 端口或 Hybrid 端口的典型特征。

1/0/0这个是tag的,vlan 30在trunk允许通过的列表中,这里g0/0/1中我设置的pvid=20,vlan 30的帧vid=pvid=30,和该端口pvid比较,不相同,所以直接通过该端口转发不进行帧剥离

情景一:转发VLAN 30的帧(对应您的描述)

  1. 交换机内部有一个目标MAC地址在VLAN 30中,且需要从 G0/0/1发出的数据帧。
  2. 出口端口 G0/0/1是Trunk,且允许VLAN 30通过。
  3. 交换机检查:帧的 VID (30) ≠ 端口的 PVID (20)
  4. 判决:保留标签,直接转发。
  5. 结果:对端交换机收到一个带有VLAN 30标签的帧,可以正确处理。

情景二:转发VLAN 20的帧

  1. 交换机内部有一个目标MAC地址在VLAN 20中,且需要从 G0/0/1发出的数据帧。
  2. 出口端口 G0/0/1是Trunk,且允许VLAN 20通过。
  3. 交换机检查:帧的 VID (20) = 端口的 PVID (20)
  4. 判决:剥离VLAN 20的标签,然后转发。
  5. 结果:对端设备收到一个普通的、无标签的以太网帧。如果对端是一个交换机端口且PVID也是20,它会将这个无标签帧归类到自己的VLAN 20中。

VLAN 跳跃攻击

VLAN 跳跃攻击 (VLAN-Hopping) 有两种手段,分别是双重标签交换机欺骗

双重标签 (Double Tagging)

攻击方法:

攻击者要想实施双层 TAG 攻击的前提是接入缺省 VLAN, 然后在封装帧时前面打两层标签,最外面一层是缺省 VLAN ID, 第二层是要攻击的 VLAN ID。当这个帧进入第一台交换机时,第一层标签被去掉,并送入缺省 VLAN, 例如默认的 VLAN 1。当这个帧进入 sw1 和 sw2 之间的 Trunk 时,由于它默认处于缺省 VLAN, 因此不再封装新的 TAG, 这样它原本的第二层 TAG 就显露出来了。当进入 sw2 时,再摘掉第二个 TAG, 也就是想要攻击的 VLAN, 这样就成功地实施了 VLAN 跳跃攻击,但此类攻击为单向攻击,即流量不可回,通常应用在 DDOS 攻击上。

经测试,Windows网卡会自动剥离外层的VLAN标签,此处不进行实验仅描述过程:

image-20260429160456515

1. 【Cloud1(攻击者端)】发送的原始包

这是你脚本构造的完整双层 VLAN 帧,只有在 Cloud1 的出口抓包,才能看到完整结构

Ethernet头(目的MAC, 源MAC)
→ 外层802.1Q标签:VLAN ID=10(TPID=0x8100)
→ 内层802.1Q标签:VLAN ID=20(TPID=0x8100)
→ IP头:src=192.168.21.1 → dst=192.168.21.9
→ 数据载荷(比如ICMP/IP数据)

在这里抓包,能看到两个连续的81 00标签,分别对应 VLAN10 和 VLAN20。


2. 【CE1 的入端口(连接 Cloud1 的 Access 端口)】

交换机收到双层标签帧后,会执行经典的 “本征 VLAN 剥离逻辑”:

  • 识别外层标签 VLAN10,发现和该 Access 端口的 PVID=10 一致
  • 自动剥离外层 VLAN10 标签,把剩下的帧(带内层 VLAN20 标签)从 Trunk 端口转发给 CE2

所以在 CE1 的入端口抓包:

  • 入方向:和 Cloud1 发送的一样,是双层标签帧
  • 出方向(往 CE2 的 Trunk 链路):只剩单层 VLAN20 标签帧

【CE1 ↔ CE2 之间的 Trunk 链路】

传输的是被剥离了外层标签的帧,结构是:

Ethernet头
→ 单层802.1Q标签:VLAN ID=20(TPID=0x8100)
→ IP头:src=192.168.21.1 → dst=192.168.21.9
→ 数据载荷

在这里抓包,只能看到 VLAN20 的标签,外层 VLAN10 已经被 CE1 剥离了。


【CE2 的处理与 PC2 收到的包】

  • CE2 收到 Trunk 链路上的 VLAN20 标签帧,识别出属于 VLAN20 的流量
  • CE2 会把帧转发到 VLAN20 的 Access 端口(连接 PC2 的端口)
  • 连接 PC2 的 Access 端口会剥离 VLAN20 标签,把纯 IP 帧发给 PC2

PC2 收到的包是完全没有 VLAN 标签的纯 IP 帧

Ethernet头
→ IP头:src=192.168.21.1 → dst=192.168.21.9
→ 数据载荷

PC2 只会认为这是来自 192.168.21.1 的普通 IP 包,完全不知道它跨越了 VLAN10 和 VLAN20 的隔离。

防御方法:

更改默认的缺省 VLAN ID, 使用一个不常用的 VLAN 作为缺省 VLAN, 并且 Trunk 的交换机缺省 VLAN ID 要保持一致。同时将所有不使用的接口 shutdown 并划入这个新创建的本征 VLAN。

交换机欺骗 (Switch Spoofing)-思科交换机

攻击方法:

很多交换机都开启了动态 Trunk(DTP)的主动协商,如思科的的 SW3550 交换机,如果用一根网线将两台 3550 交换机连接起来,它们会自动协商为 Trunk, 原因就是它们默认开启了 DTP 的主动协商。如果一位攻击者使用一台 PC 安装一块服务器网卡,就可以轻松地与交换机协商 Trunk。一旦协商完成,就可以随意访问任何 VLAN(某些品牌交换机的 Trunk 默认允许所有 VLAN 流量通过,而某些品牌交换机的 Trunk 默认只允许默认 VLAN, 即 VLAN1 的流量通过)。

防御方法

可以通过关闭交换机的 DTP 主动协商来缓解此类攻击。

Daniel_WRF
最后更新于 2026-04-29