# Performing Subdomain Enumeration With Subfinder

> 使用 ProjectDiscovery 的 Subfinder 被动侦察工具枚举目标域名的子域名，在安全评估期间绘制攻击面图谱。

- Skill: `killvxk/performing-subdomain-enumeration-with-subfinder` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add killvxk/performing-subdomain-enumeration-with-subfinder`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/performing-subdomain-enumeration-with-subfinder/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/performing-subdomain-enumeration-with-subfinder

---


# 使用 Subfinder 执行子域名枚举（Performing Subdomain Enumeration with Subfinder）

## 适用场景
- 在渗透测试或漏洞赏金猎人的侦察阶段
- 绘制目标组织的外部攻击面时
- 在对发现的子域名执行漏洞扫描之前
- 为持续安全监控构建资产清单时
- 在需要被动信息收集的红队演习期间

## 前置条件
- 安装 Go 1.21+（从源码构建）
- 安装 Subfinder v2（`go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest`）
- 为被动源配置 API 密钥（Shodan、Censys、VirusTotal、SecurityTrails、Chaos）
- `$HOME/.config/subfinder/provider-config.yaml` 中的提供商配置文件
- 网络访问被动 DNS 和证书透明度数据源
- httpx 或 httprobe，用于验证发现的子域名

## 工作流程

### 步骤 1 — 安装和配置 Subfinder
```bash
# 安装 subfinder
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest

# 验证安装
subfinder -version

# 配置 API 密钥以获得更好的结果
mkdir -p $HOME/.config/subfinder
cat > $HOME/.config/subfinder/provider-config.yaml << 'EOF'
shodan:
  - YOUR_SHODAN_API_KEY
censys:
  - YOUR_CENSYS_API_ID:YOUR_CENSYS_API_SECRET
virustotal:
  - YOUR_VT_API_KEY
securitytrails:
  - YOUR_ST_API_KEY
chaos:
  - YOUR_CHAOS_API_KEY
EOF
```

### 步骤 2 — 运行基本子域名枚举
```bash
# 单域名枚举
subfinder -d example.com -o subdomains.txt

# 从文件枚举多个域名
subfinder -dL domains.txt -o all_subdomains.txt

# 使用所有被动源（较慢但更彻底）
subfinder -d example.com -all -o subdomains_all.txt

# 静默模式，用于管道传输到其他工具
subfinder -d example.com -silent | httpx -silent -status-code
```

### 步骤 3 — 过滤和自定义源选择
```bash
# 仅使用特定源
subfinder -d example.com -s crtsh,virustotal,shodan -o filtered.txt

# 排除特定源
subfinder -d example.com -es github -o results.txt

# 启用递归子域名枚举
subfinder -d example.com -recursive -o recursive_subs.txt

# 匹配特定模式
subfinder -d example.com -m "api,dev,staging" -o matched.txt
```

### 步骤 4 — 控制速率限制和输出格式
```bash
# 速率限制以避免 API 节流
subfinder -d example.com -rate-limit 10 -t 5 -o rate_limited.txt

# JSON 输出用于程序化处理
subfinder -d example.com -oJ -o subdomains.json

# 带来源信息输出
subfinder -d example.com -cs -o subdomains_with_sources.txt

# 按域名收集结果到目录
subfinder -dL domains.txt -oD ./results/
```

### 步骤 5 — 使用 httpx 验证发现的子域名
```bash
# 将 subfinder 输出管道传输到 httpx 进行实时验证
subfinder -d example.com -silent | httpx -silent -status-code -title -tech-detect -o live_hosts.txt

# 检查特定端口
subfinder -d example.com -silent | httpx -ports 80,443,8080,8443 -o web_services.txt

# 解析 IP 地址
subfinder -d example.com -silent | dnsx -a -resp -o resolved.txt
```

### 步骤 6 — 集成到更广泛的侦察管道
```bash
# 与 nuclei 链接进行漏洞扫描
subfinder -d example.com -silent | httpx -silent | nuclei -t cves/ -o vulns.txt

# 与 amass 结合进行综合枚举
subfinder -d example.com -o subfinder_results.txt
amass enum -passive -d example.com -o amass_results.txt
cat subfinder_results.txt amass_results.txt | sort -u > combined_subdomains.txt

# 对发现的主机截图
subfinder -d example.com -silent | httpx -silent | gowitness file -f - -P screenshots/
```

## 核心概念

| 概念 | 定义 |
|---------|-------------|
| 被动枚举（Passive Enumeration） | 在不直接查询目标 DNS 服务器的情况下发现子域名 |
| 证书透明度（Certificate Transparency） | 揭示子域名名称的 SSL/TLS 证书公共日志 |
| DNS 聚合（DNS Aggregation） | 从多个被动 DNS 数据库收集子域名数据 |
| 递归枚举（Recursive Enumeration） | 发现子域名的子域名以实现更深层覆盖 |
| 源提供商（Source Providers） | 为子域名情报查询的外部 API 和数据库 |
| CNAME 记录 | 可能揭示额外基础设施的规范名称记录 |
| 通配符 DNS（Wildcard DNS） | 为任何子域名查询返回结果的 DNS 配置 |

## 工具与系统

| 工具 | 用途 |
|------|---------|
| Subfinder | 主要的被动子域名枚举引擎 |
| httpx | 用于验证活跃子域名的 HTTP 探测工具 |
| dnsx | DNS 解析和验证工具包 |
| Nuclei | 用于发现主机的基于模板的漏洞扫描器 |
| Amass | 具有主动/被动模式的互补子域名枚举工具 |
| gowitness | 用于视觉侦察的 Web 截图工具 |
| Shodan | 用于子域名情报的全网扫描数据库 |
| crt.sh | 证书透明度日志搜索引擎 |

## 常见场景

1. **漏洞赏金侦察** — 枚举目标项目范围内的所有子域名，识别可能包含漏洞的被遗忘或配置错误的资产
2. **攻击面映射** — 构建外部可访问子域名的综合清单，用于持续安全监控和风险评估
3. **云资产发现** — 识别指向云服务（AWS、Azure、GCP）的子域名，这些可能容易受到子域名接管
4. **CI/CD 集成** — 在管道中自动化子域名监控，检测新子域名并在攻击面变化时发出警报
5. **并购尽职调查** — 在安全评估期间映射收购目标的完整外部足迹

## 输出格式

```
## 子域名枚举报告
- **目标域名**：example.com
- **发现子域名总数**：247
- **活跃主机**：183
- **唯一 IP 地址**：42
- **使用的源**：crt.sh、VirusTotal、Shodan、SecurityTrails、Censys

### 发现的子域名
| 子域名 | IP 地址 | 状态码 | 技术 |
|-----------|-----------|-------------|------------|
| api.example.com | 10.0.1.5 | 200 | Nginx, Node.js |
| staging.example.com | 10.0.2.10 | 403 | Apache |
| dev.example.com | 10.0.3.15 | 200 | Express |

### 修复建议
- 删除已停用子域名的 DNS 记录
- 调查 CNAME 指向未认领服务的子域名
- 限制对开发和演示环境的访问
```

