子域名发现

子域名发现

子域名发现是红队评估和渗透测试中信息搜集阶段的核心环节。目标组织往往存在大量未在主站显露的资产(如测试环境、后台接口、VPN 等),子域名发现能帮助攻击者有效扩大攻击面,挖掘潜在漏洞。

被动搜集

被动搜集不直接与目标服务器交互,而是利用第三方数据源、搜索引擎或证书透明度日志获取信息,隐蔽性高。

1. Subfinder

ProjectDiscovery 出品,速度极快,是目前最主流的工具之一。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest

# 基本使用
subfinder -d example.com

# 使用所有数据源(包括 API)
subfinder -d example.com -all

# 递归查找子域名
subfinder -d example.com -recursive

# 排除特定源
subfinder -d example.com -exclude-sources archiveis

2. Amass

OWASP 项目,功能极其强大,整合了 ASN、图形遍历等多种技术,适合深度侦察。

1
2
3
4
5
6
7
8
9
10
11
# 安装
go install -v github.com/owasp-amass/amass/v4/cmd/amass@latest

# 被动枚举(不发起直接请求)
amass enum -passive -d example.com

# 主动枚举(使用 DNS 解析和暴力破解,较慢但全)
amass enum -active -d example.com

# 完整的情报收集(包含 ASN 资产等)
amass intel -d example.com

3. Layer (子域名挖掘机)

国内著名的图形化/命令行工具,内置了大量针对国内的接口和字典,适合中文环境。

1
2
3
4
# 下载运行 (Windows)
# ./Layer.exe

# 常用选项:勾选 API 接口,使用高速模式

4. OneForAll

国人开发的一款功能强大的集大成工具,集成了数十种子域名收集模块。

1
2
3
4
5
6
7
8
9
10
# 安装
git clone https://github.com/shmilylty/OneForAll.git
cd OneForAll
pip3 install -r requirements.txt

# 使用默认配置全量收集
python3 oneforall.py --target example.com run

# 指定 API 配置文件
python3 oneforall.py --target example.com run --config ./config/api_config.json

5. Chaos

ProjectDiscovery 的公开数据集,适合快速发现已被记录的子域名。

1
2
3
4
5
# 安装
go install -v github.com/projectdiscovery/chaos-client/cmd/chaos@latest

# 查询
chaos -d example.com

主动爆破

当被动搜集无法满足需求时,使用字典对 DNS 服务器进行查询。注意:主动爆破会产生大量流量,容易被安全设备感知。

1. Puredns

专为子域名爆破设计的工具,去重和解析速度极快,推荐用于处理大规模字典。

1
2
3
4
5
6
7
8
# 安装
go install -v github.com/d3mondev/puredns/v2@latest

# 解析子域名
puredns resolve subs.txt -w resolved.txt

# 仅进行去重(清洗通配符)
puredns sub example.com > subs.txt

2. Ksubdomain

无状态子域名爆破工具,支持并发数极高(10万级),适合内网大段扫描或极速爆破。

1
2
# 运行
./ksubdomain -d example.com -subdomains dict.txt -threads 1000

3. Dnsx

虽然主要用于 DNS 解析验证,但也可用于简单的爆破。

1
2
3
4
5
6
7
8
# 安装
go install -v github.com/projectdiscovery/dnsx@latest

# 解析已知的子域名列表,验证存活
dnsx -l subs.txt -o alive.txt -a -aaaa -cname

# 使用简单模式爆破(配合字典)
echo "dev\ntest" | dnsx -d example.com -retry 3

证书透明度 (CT Logs)

通过查询 HTTPS 证书的透明度日志,可以发现目标颁发过证书的子域名,准确性极高。

在线工具

命令行查询

1
2
3
4
5
6
# 使用 curl 查询 crt.sh
curl -s "https://crt.sh/?q=%.example.com&output=json" | jq -r '.[].name_value' | sed 's/\*\.//g' | sort -u

# 使用工具 ctfr (Python)
git clone https://github.com/UnaPibaGeek/ctfr.git
python3 ctfr.py -d example.com -o ctfr_subs.txt

变形与排列

基于已知的子域名,通过添加前缀、后缀或替换字符来猜测其他可能的资产。

1. Altdns

1
2
3
4
5
# 生成变形字典
./altdns.py -i words.txt -o data_output -w words.txt

# 结合 dnmap 批量解析
dnmap masscan_script.txt

2. Gotator (Go编写,推荐)

1
2
3
4
go install -v github.com/Josue87/gotator@latest

# 基本使用
gotator -sub example.com -perm numbers -depth 2 -numbers 10 -mindup -adv -o dev_words.txt

存活探测与指纹识别

收集到大量子域名后,必须进行存活验证,剔除无效域名。

HTTPx

ProjectDiscovery 旗下的 HTTP 探测神器,支持多种探针。

1
2
3
4
5
6
7
8
9
10
11
# 安装
go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest

# 基本存活探测
httpx -l subs.txt -o alive.txt

# 获取标题、状态码、技术栈
httpx -l subs.txt -title -status-code -tech-detect -server -o alive.txt

# 跟随重定向,探测默认端口 (80, 443, 8080)
httpx -l subs.txt -follow-redirects -ports 80,443,8080

综合实战工作流

建议将多个工具串联起来,形成自动化 Pipeline。以下是一个典型的 Bash 工作流:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 定义目标
target="example.com"

# 1. 被动搜集 (合并 subfinder, amass, chaos)
subfinder -d $target -silent > tmp_passive.txt &&
amass enum -passive -d $target -silent >> tmp_passive.txt &&
chaos -d $target -silent >> tmp_passive.txt &&

# 2. 主动爆破 (使用 puredns + 大字典)
puredns resolve big_dict.txt -d $target -w tmp_active.txt &&

# 3. 合并去重
cat tmp_passive.txt tmp_active.txt | sort -u > all_subs.txt &&

# 4. 存活探测 (httpx)
httpx -l all_subs.txt -title -status-code -tech-detect -o final_alive.txt &&

# 5. 清理临时文件
rm tmp_passive.txt tmp_active.txt all_subs.txt

echo "Scan finished. Results saved in final_alive.txt"

常见子域名字典

除了通用的 www, api 等,针对不同资产的特定字典:

基础类:

1
www, mail, ftp, admin, login, test, dev, staging, beta, prod, dashboard

技术类:

1
nginx, apache, tomcat, jenkins, gitlab, grafana, kibana, elasticsearch, k8s, kubernetes

地理位置/环境类:

1
bj, sh, gz, sz, us, hk, internal, external, vpn, db, mongo, redis, mysql

安全相关:

1
security, sso, auth, key, secret, cert, ca, firewall, waf

技巧与最佳实践

  1. 防泛解析

    • 目标可能配置了通配符 DNS 记录 (*.example.com),导致爆破结果全是 IP。
    • 解决方法:在进行爆破前,使用 dnsxpuredns 先验证一个随机生成的子域名,如果返回了 IP,说明存在泛解析。在后续处理中需要过滤掉与泛解析 IP 相同的结果。
  2. 关注非标端口

    • 许多资产隐藏在 8080, 8443, 9000, 8081 等非标准端口,不要仅扫描 80/443。
  3. 历史域名

    • 很多子域名虽然 DNS 解析失效了,但 IP 上的服务可能还开着。使用 httpx-probe-all-ips 功能或者结合 IP 端口扫描来发现“幽灵”资产。
  4. API 资产

    • 重点留意 api, graphql, v1, v2, gateway, internal-api 等关键字。

防御建议

  1. 最小化原则:定期清理不再使用的 DNS 记录,避免资产泄露。
  2. 限制传输:避免使用通配符证书,如果必须使用,请确保证书透明度日志的监控。
  3. 访问控制:内部子域名不应直接暴露在公网,必须配置 VPN 或 IP 白名单访问。
  4. 监控告警:部署监控服务(如 ProjectDiscovery 的 notify),当发现新注册的证书或新的子域名解析时及时触发告警。