DNS枚举
yc Lv1

DNS 枚举

DNS 枚举是通过查询 DNS 服务器获取目标域名相关信息的过程,是信息搜集和渗透测试的重要步骤。

DNS 记录类型

常见记录类型

类型 全称 用途
A Address IPv4 地址映射
AAAA IPv6 Address IPv6 地址映射
CNAME Canonical Name 别名记录
MX Mail Exchange 邮件服务器
NS Name Server 域名服务器
TXT Text 文本信息(SPF、DKIM 等)
SOA Start of Authority 授权起始记录
SRV Service 服务记录
PTR Pointer 反向 DNS 查询

命令行工具

1. dig

功能强大的 DNS 查询工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 基本 A 记录查询
dig example.com

# 查询特定记录类型
dig example.com MX
dig example.com TXT
dig example.com NS

# 查询所有记录
dig example.com ANY

# 反向查询
dig -x 8.8.8.8

# 指定 DNS 服务器
dig @8.8.8.8 example.com

# 追踪 DNS 解析路径
dig +trace example.com

# 简洁输出
dig +short example.com

# 批量查询
dig -f domains.txt +short

2. nslookup

Windows 和 Linux 通用的 DNS 查询工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 基本查询
nslookup example.com

# 查询特定类型
nslookup -type=MX example.com
nslookup -type=NS example.com

# 指定 DNS 服务器
nslookup example.com 8.8.8.8

# 交互模式
nslookup
> set type=MX
> example.com
> server 8.8.8.8
> example.com

3. host

简洁的 DNS 查询工具。

1
2
3
4
5
6
7
8
9
10
11
12
# 基本查询
host example.com

# 查询特定类型
host -t MX example.com
host -t TXT example.com

# 详细输出
host -v example.com

# 反向查询
host 8.8.8.8

DNS 区域传送

DNS 区域传送是一种 DNS 服务器同步机制,如果配置不当可能泄露所有子域名信息。

1
2
3
4
5
6
7
8
# 测试区域传送
dig axfr @ns1.example.com example.com

# 使用 host 命令
host -l example.com ns1.example.com

# 使用 nmap
nmap --script dns-zone-transfer -p 53 ns1.example.com

DNS 爆破工具

dnsx

快速 DNS 解析和爆破工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装
go install -v github.com/projectdiscovery/dnsx@latest

# 基本解析
dnsx -l domains.txt -o resolved.txt

# A 记录查询
dnsx -l domains.txt -a -o a_records.txt

# 多记录类型查询
dnsx -l domains.txt -a -aaaa -cname -mx -txt -o all_records.txt

# 通配符检测
dnsx -l domains.txt -wildcard

# 多线程解析
dnsx -l domains.txt -t 100 -o resolved.txt

# 输出 JSON 格式
dnsx -l domains.txt -json -o results.json

massdns

高性能的 DNS 解析器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装
git clone https://github.com/blechschmidt/massdns.git
cd massdns
make && make install

# 基本使用
massdns -r resolvers.txt -t A domains.txt -o results.txt

# 使用自定义解析器列表
echo "8.8.8.8" > resolvers.txt
echo "1.1.1.1" >> resolvers.txt
massdns -r resolvers.txt -t A domains.txt

# 输出简化结果
massdns -r resolvers.txt -t A domains.txt -o S -w results.txt

DNS 信息搜集工具

DNSRecon

功能全面的 DNS 枚举脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 安装
git clone https://github.com/darkoperator/dnsrecon.git
cd dnsrecon
pip install -r requirements.txt

# 标准枚举
python dnsrecon.py -d example.com

# 区域传送尝试
python dnsrecon.py -t axfr -d example.com

# 字典爆破
python dnsrecon.py -d example.com -D wordlist.txt -t brt

# SRV 记录枚举
python dnsrecon.py -d example.com -t srv

# 通配符检查
python dnsrecon.py -d example.com -t wildcard

# Google 侦察
python dnsrecon.py -d example.com -t goo

实用技巧

1. SPF 记录分析

SPF 记录可以揭示邮件服务器和第三方服务信息。

1
2
3
4
5
6
7
8
# 查询 SPF 记录
dig example.com TXT

# 常见 SPF 服务商
# - Google Workspace
# - Microsoft 365
# - SendGrid
# - Mailchimp

2. DKIM 和 DMARC

1
2
3
4
5
6
# DMARC 记录
dig _dmarc.example.com TXT

# DKIM 选择器(需要猜测或通过邮件头获取)
dig selector1._domainkey.example.com TXT
dig google._domainkey.example.com TXT

3. DNSSEC 记录

1
2
3
4
5
6
# 检查 DNSSEC
dig example.com DNSKEY
dig example.com DS

# 使用 dig 验证
dig +dnssec example.com

4. 多种 DNS 服务器查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 公共 DNS
# Cloudflare
dig @1.1.1.1 example.com
dig @2606:4700:4700::1111 example.com

# Google
dig @8.8.8.8 example.com
dig @2001:4860:4860::8888 example.com

# Quad9
dig @9.9.9.9 example.com

# OpenDNS
dig @208.67.222.222 example.com

在线工具

DNS 查询服务

DNS 历史记录

安全建议

防御 DNS 枚举

  1. 禁用区域传送

    1
    2
    3
    4
    zone "example.com" {
    type master;
    allow-transfer { none; };
    };
  2. 限制 DNS 记录暴露

    • 避免在 TXT 记录中存储敏感信息
    • 定期审查 DNS 记录
  3. 使用 DNSSEC

    • 保护 DNS 查询完整性
    • 防止 DNS 欺骗
  4. 监控 DNS 查询

    • 检测异常查询模式
    • 识别潜在的侦察活动

实战工作流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
# 完整的 DNS 枚举脚本

DOMAIN="example.com"
OUTPUT_DIR="dns_enum_${DOMAIN}"
mkdir -p $OUTPUT_DIR

echo "[*] DNS 枚举开始: $DOMAIN"

# 1. 基本记录查询
echo "[+] A 记录"
dig $DOMAIN A +short > $OUTPUT_DIR/a.txt

echo "[+] MX 记录"
dig $DOMAIN MX +short > $OUTPUT_DIR/mx.txt

echo "[+] NS 记录"
dig $DOMAIN NS +short > $OUTPUT_DIR/ns.txt

echo "[+] TXT 记录"
dig $DOMAIN TXT +short > $OUTPUT_DIR/txt.txt

# 2. 区域传送测试
echo "[+] 区域传送测试"
dig axfr @$DOMAIN $DOMAIN > $OUTPUT_DIR/axfr.txt 2>&1

# 3. 子域名枚举
echo "[+] 子域名枚举"
subfinder -d $DOMAIN -silent > $OUTPUT_DIR/subdomains.txt

# 4. DNS 解析验证
echo "[+] 解析验证"
dnsx -l $OUTPUT_DIR/subdomains.txt -o $OUTPUT_DIR/resolved.txt

echo "[*] DNS 枚举完成!结果保存在 $OUTPUT_DIR"
由 Hexo 驱动 & 主题 Keep