Subfinder 是一个强大的子域名发现工具,由 ProjectDiscovery 团队开发,用于通过被动在线资源(如证书透明度日志、DNS 数据、搜索引擎等)发现目标网站的子域名。它适用于安全研究人员和渗透测试人员,能够快速高效地枚举子域名。本教程将详细介绍 Subfinder 的安装、使用方法及各个参数的功能,帮助你全面掌握这一工具。
一、安装 Subfinder
在开始使用 Subfinder 之前,你需要先安装它。以下是安装步骤:
使用 Go 安装(推荐) 如果你有 Go 环境,可以通过以下命令直接安装最新版本:
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
安装完成后,Subfinder 的二进制文件会位于 $GOPATH/bin 目录下。确保将该路径添加到你的环境变量中,以便全局调用。
使用预编译二进制文件 你可以从 Subfinder 的 GitHub Releases 页面 下载适用于你操作系统的预编译二进制文件。下载后解压并将其移动到可执行路径,例如:
tar -xzf subfinder_2.x.x_linux_amd64.tar.gz
sudo mv subfinder /usr/local/bin/
验证安装 安装完成后,运行以下命令检查版本号,确认安装成功:
subfinder -version
二、基本用法
Subfinder 的基本用法是通过命令行指定目标域名并运行子域名枚举。以下是一个简单的示例:
subfinder -d example.com
这条命令将对 example.com 执行子域名发现,并将结果输出到终端。
三、常用参数详解
Subfinder 提供了丰富的参数选项,可以根据需求进行灵活配置。以下是参数的分类和详细说明:
1. 输入参数 (INPUT)
-d, -domain string[] 指定目标域名,可以是单个域名或多个域名(用逗号分隔)。 示例:
subfinder -d example.com,example.org
-dL, -list string 指定包含域名列表的文件,每行一个域名。 示例:
subfinder -dL domains.txt
domains.txt 示例内容:
example.com
example.org
2. 数据源参数 (SOURCE)
-s, -sources string[] 指定要使用的特定数据源,用逗号分隔。默认情况下,Subfinder 会使用所有可用源。 示例:
subfinder -d example.com -s crtsh,github
-recursive 仅使用支持递归子域名枚举的源(例如能处理 sub.sub.domain.tld 的源)。 示例:
subfinder -d example.com -recursive
-all 使用所有可用数据源进行枚举(速度较慢)。 示例:
subfinder -d example.com -all
-es, -exclude-sources string[] 排除指定的数据源。 示例:
subfinder -d example.com -es alienvault,zoomeye
-ls, -list-sources 列出所有可用数据源,然后退出。 示例:
subfinder -ls
3. 过滤参数 (FILTER)
-m, -match string[] 指定要匹配的子域名(可以是文件或逗号分隔的列表)。仅输出匹配的子域名。 示例:
subfinder -d example.com -m api.example.com,dev.example.com
-f, -filter string[] 指定要过滤掉的子域名(可以是文件或逗号分隔的列表)。 示例:
subfinder -d example.com -f test.example.com
4. 速率限制参数 (RATE-LIMIT)
-rl, -rate-limit int 设置每秒发送的 HTTP 请求上限。 示例:
subfinder -d example.com -rl 50
-t int 设置并发解析的 goroutine 数量(仅在 -active 模式下生效,默认值为 10)。 示例:
subfinder -d example.com -t 20 -nW
5. 更新参数 (UPDATE)
-up, -update 更新 Subfinder 到最新版本。 示例:
subfinder -up
-duc, -disable-update-check 禁用自动更新检查。 示例:
subfinder -d example.com -duc
6. 输出参数 (OUTPUT)
-o, -output string 指定输出结果的文件。 示例:
subfinder -d example.com -o subdomains.txt
-oJ, -json 将结果以 JSON Lines 格式输出。 示例:
subfinder -d example.com -oJ -o subdomains.jsonl
-oD, -output-dir string 指定输出目录(仅在 -dL 模式下生效)。 示例:
subfinder -dL domains.txt -oD output/
-cs, -collect-sources 在输出中包含每个子域名的数据源(仅在 -json 模式下生效)。 示例:
subfinder -d example.com -oJ -cs
-oI, -ip 在输出中包含主机的 IP 地址(仅在 -active 模式下生效)。 示例:
subfinder -d example.com -nW -oI
7. 配置参数 (CONFIGURATION)
-config string 指定配置文件路径,默认路径为 /root/.config/subfinder/config.yaml。 示例:
subfinder -d example.com -config custom-config.yaml
-pc, -provider-config string 指定数据源的 API 密钥配置文件路径,默认路径为 /root/.config/subfinder/provider-config.yaml。 示例:
subfinder -d example.com -pc provider-config.yaml
-r string[] 指定自定义 DNS 解析器列表,用逗号分隔。 示例:
subfinder -d example.com -r 8.8.8.8,1.1.1.1
-rL, -rlist string 指定包含 DNS 解析器列表的文件。 示例:
subfinder -d example.com -rL resolvers.txt
-nW, -active 仅显示活跃的子域名(通过 DNS 解析验证)。 示例:
subfinder -d example.com -nW
-proxy string 指定 HTTP 代理。 示例:
subfinder -d example.com -proxy http://127.0.0.1:8080
-ei, -exclude-ip 从结果中排除 IP 地址。 示例:
subfinder -d example.com -ei
8. 调试参数 (DEBUG)
-silent 仅显示子域名,不输出其他信息。 示例:
subfinder -d example.com -silent
-version 显示 Subfinder 的版本号。 示例:
subfinder -version
-v 显示详细输出(包括调试信息)。 示例:
subfinder -d example.com -v
-nc, -no-color 禁用终端输出的颜色。 示例:
subfinder -d example.com -nc
-stats 显示数据源统计信息。 示例:
subfinder -d example.com -stats
9. 优化参数 (OPTIMIZATION)
-timeout int 设置超时时间(单位:秒,默认值为 30)。 示例:
subfinder -d example.com -timeout 60
-max-time int 设置枚举的最大等待时间(单位:分钟,默认值为 10)。 示例:
subfinder -d example.com -max-time 5
四、配置文件说明
Subfinder 支持通过配置文件管理数据源的 API 密钥和其他设置。默认的提供者配置文件位于 ~/.config/subfinder/provider-config.yaml。你需要为某些数据源(如 VirusTotal、Shodan)提供 API 密钥。配置文件示例:
provider-config.yaml
binaryedge:
- abc123
censys:
- id:secret
shodan:
- xyz789
编辑完成后,将文件路径通过 -pc 参数指定。
五、实用示例
基本子域名枚举
subfinder -d example.com -o subdomains.txt
使用特定数据源并输出 JSON
subfinder -d example.com -s crtsh,passivetotal -oJ -o subdomains.jsonl
枚举多个域名并验证活跃状态
subfinder -dL domains.txt -nW -oI -o active-subdomains.txt
设置代理和速率限制
subfinder -d example.com -proxy http://127.0.0.1:8080 -rl 100
递归枚举并显示详细输出
subfinder -d example.com -recursive -v
六、注意事项
API 密钥 某些数据源需要 API 密钥才能正常工作。确保在 provider-config.yaml 中正确配置。
网络环境 如果网络受限,可以通过 -proxy 参数设置代理,或者使用 -r 指定自定义 DNS 解析器。
性能优化 使用 -rl 和 -t 参数调整请求速率和并发数,避免触发目标网站的防护机制。
七、总结
Subfinder 是一个功能强大且灵活的子域名枚举工具,通过其丰富的参数和被动数据源,可以高效地发现目标域名的子域名。希望本教程能帮助你熟练掌握 Subfinder 的使用!