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 的使用!