Subfinder使用教程#
软件介绍#
Subfinder是一款快速、被动的子域名发现工具,专注于从各种公共数据源中收集子域名信息。它的设计目标是提供高效、可靠的子域名枚举能力。
入门级使用#
基本子域名枚举#
功能说明:使用默认设置枚举目标域名的子域名
使用示例:
# 基本子域名枚举
subfinder -d example.com
# 枚举多个域名
subfinder -d example.com -d test.com
# 从文件中读取域名
subfinder -dL domains.txt
# 将结果输出到文件
subfinder -d example.com -o results.txt参数说明:
-d:指定目标域名-dL:从文件中读取域名列表-o:指定输出文件
简单的被动收集#
功能说明:仅使用被动方法收集子域名,减少被检测的风险
使用示例:
# 仅使用被动方法
subfinder -d example.com -all
# 被动收集并输出到文件
subfinder -d example.com -all -o passive_results.txt
# 被动收集多个域名
subfinder -d example.com -d test.com -all
# 静默模式,仅输出子域名
subfinder -d example.com -silent参数说明:
-all:使用所有可用的被动数据源-silent:静默模式,仅输出子域名-o:指定输出文件
初级使用#
数据源配置#
功能说明:配置和使用特定的数据源
使用示例:
# 列出所有可用的数据源
subfinder -ls
# 仅使用特定数据源
subfinder -d example.com -sources crtsh,alienvault
# 排除特定数据源
subfinder -d example.com -es archiveis
# 使用API密钥启用更多数据源
# 需要在~/.config/subfinder/config.yaml中配置API密钥
subfinder -d example.com -all
# 测试特定数据源
subfinder -d example.com -sources shodan -v参数说明:
-ls:列出所有可用的数据源-sources:仅使用指定的数据源-es:排除指定的数据源-v:详细输出
结果格式化#
功能说明:控制输出结果的格式
使用示例:
# 以JSON格式输出
subfinder -d example.com -json
# 以CSV格式输出
subfinder -d example.com -csv
# 以表格格式输出
subfinder -d example.com -table
# 仅输出子域名
subfinder -d example.com -silent
# 输出详细信息
subfinder -d example.com -v
# 将结果追加到文件
subfinder -d example.com -o results.txt -a参数说明:
-json:以JSON格式输出-csv:以CSV格式输出-table:以表格格式输出-silent:静默模式,仅输出子域名-v:详细输出-a:追加结果到文件
中级使用#
高级枚举选项#
功能说明:使用高级选项进行更深入的子域名枚举
使用示例:
# 设置超时时间
subfinder -d example.com -timeout 10
# 设置最大重试次数
subfinder -d example.com -max-resolution-retries 3
# 启用递归枚举
subfinder -d example.com -recursive
# 设置线程数
subfinder -d example.com -t 10
# 限制并发请求数
subfinder -d example.com -c 5参数说明:
-timeout:设置超时时间(秒)-max-resolution-retries:设置最大解析重试次数-recursive:启用递归枚举-t:设置线程数-c:限制并发请求数
DNS解析#
功能说明:配置DNS解析选项
使用示例:
# 禁用DNS解析
subfinder -d example.com -nW
# 使用指定的DNS服务器
subfinder -d example.com -r 8.8.8.8,8.8.4.4
# 从文件中读取DNS服务器列表
subfinder -d example.com -rL resolvers.txt
# 设置DNS超时时间
subfinder -d example.com -dns-timeout 5
# 启用DNS缓存
subfinder -d example.com -enable-dns-cache参数说明:
-nW:禁用DNS解析-r:指定DNS服务器-rL:从文件中读取DNS服务器列表-dns-timeout:设置DNS超时时间(秒)-enable-dns-cache:启用DNS缓存
中上级使用#
攻击面映射#
功能说明:使用Subfinder进行完整的攻击面映射
使用示例:
# 执行完整的子域名枚举
subfinder -d example.com -all -recursive -o complete_results.txt
# 结合其他工具进行深入分析
subfinder -d example.com -silent | xargs -I {} nmap -sV {}
# 与httpx结合使用,检查子域名是否可访问
subfinder -d example.com -silent | httpx
# 与shuffledns结合使用,进行DNS验证
subfinder -d example.com -silent | shuffledns -d example.com -r resolvers.txt
# 与amass结合使用,获得更全面的结果
subfinder -d example.com -silent > subfinder_results.txt
amass enum -d example.com -passive -o amass_results.txt
cat subfinder_results.txt amass_results.txt | sort -u > final_results.txt参数说明:
-all:使用所有可用的被动数据源-recursive:启用递归枚举-silent:静默模式,仅输出子域名-o:指定输出文件
批量操作#
功能说明:处理多个域名的枚举任务
使用示例:
# 批量枚举多个域名
subfinder -dL domains.txt -o batch_results.txt
# 批量枚举并分别输出结果
for domain in $(cat domains.txt); do
subfinder -d $domain -o "$domain.txt"
echo "Completed: $domain"
done
# 分布式枚举(使用多个实例)
# 实例1
subfinder -dL domains1.txt -o results1.txt
# 实例2
subfinder -dL domains2.txt -o results2.txt
# 合并结果
cat results1.txt results2.txt | sort -u > final_results.txt参数说明:
-dL:从文件中读取域名列表-o:指定输出文件
高级使用#
大规模枚举#
功能说明:处理大规模的子域名枚举任务
使用示例:
# 大规模域名枚举
subfinder -dL large_domains.txt -o large_results.txt -t 20
# 增量枚举
subfinder -d example.com -all -o new_results.txt
# 与其他工具结合进行大规模扫描
subfinder -dL domains.txt -silent | httpx -silent | tee -a accessible_subdomains.txt
# 使用子进程进行并行处理
cat domains.txt | xargs -P 10 -I {} subfinder -d {} -silent >> all_subdomains.txt参数说明:
-dL:从文件中读取域名列表-all:使用所有可用的被动数据源-silent:静默模式,仅输出子域名-o:指定输出文件-t:设置线程数
结果分析#
功能说明:分析和处理枚举结果
使用示例:
# 统计子域名数量
subfinder -d example.com -silent | wc -l
# 按长度排序子域名
subfinder -d example.com -silent | awk '{print length(\$0) " " \$0}' | sort -n | cut -d' ' -f2-
# 过滤特定模式的子域名
subfinder -d example.com -silent | grep -E "test|dev|staging"
# 验证子域名是否可访问
subfinder -d example.com -silent | xargs -I {} curl -I -m 2 {}
# 按域名分组结果
for domain in $(cat domains.txt); do
subfinder -d $domain -silent > "$domain.txt"
count=$(wc -l "$domain.txt" | awk '{print \$1}')
echo "$domain: $count subdomains"
done参数说明:
-silent:静默模式,仅输出子域名
大师级使用#
自定义配置和模块#
功能说明:创建和使用自定义配置和模块
使用示例:
# 配置API密钥
# 编辑~/.config/subfinder/config.yaml文件
# 添加API密钥以启用更多数据源
# 示例配置文件内容
shodan:
- API_KEY1
- API_KEY2
twitter:
- API_KEY1:API_SECRET1
securitytrails:
- API_KEY
# 创建自定义脚本处理结果
#!/usr/bin/env bash
# 批量枚举并生成报告
domains_file="$1"
output_dir="reports"
mkdir -p "$output_dir"
for domain in $(cat "$domains_file"); do
echo "Processing $domain..."
subfinder -d "$domain" -all -silent > "$output_dir/$domain.txt"
# 生成报告
count=$(wc -l "$output_dir/$domain.txt" | awk '{print \$1}')
echo "$domain: $count subdomains" >> "$output_dir/summary.txt"
# 检查可访问性
cat "$output_dir/$domain.txt" | httpx -silent > "$output_dir/${domain}_accessible.txt"
accessible_count=$(wc -l "$output_dir/${domain}_accessible.txt" | awk '{print \$1}')
echo "$domain: $accessible_count accessible subdomains" >> "$output_dir/accessible_summary.txt"
done
echo "Report generated in $output_dir"
# 使用自定义数据源模块
# 需要在Subfinder的源代码中添加自定义数据源模块参数说明:
- 编辑配置文件添加API密钥
- 创建自定义脚本处理结果
高级攻击场景#
功能说明:在复杂的攻击场景中使用Subfinder
使用示例:
# 完整的攻击面评估
subfinder -d example.com -all -recursive -o subdomains.txt
cat subdomains.txt | httpx -silent | xargs -I {} nmap -sV {}
# 针对大型组织的多层次枚举
# 第一层:主域名
subfinder -d example.com -all -o main_subdomains.txt
# 第二层:子域名的子域名
cat main_subdomains.txt | cut -d'.' -f2- | sort -u > parent_domains.txt
subfinder -dL parent_domains.txt -all -o sub_subdomains.txt
# 合并结果
cat main_subdomains.txt sub_subdomains.txt | sort -u > all_subdomains.txt
# 与漏洞扫描工具结合
subfinder -d example.com -silent | httpx -silent | nuclei -t vulnerabilities/
# 持续监控子域名变化
while true; do
subfinder -d example.com -all -silent > current_subdomains.txt
if [ -f previous_subdomains.txt ]; then
diff previous_subdomains.txt current_subdomains.txt > changes.txt
if [ -s changes.txt ]; then
echo "New subdomains found:"
cat changes.txt | grep '>'
fi
fi
mv current_subdomains.txt previous_subdomains.txt
sleep 86400 # 每天扫描一次
done参数说明:
-all:使用所有可用的被动数据源-recursive:启用递归枚举-silent:静默模式,仅输出子域名-o:指定输出文件-dL:从文件中读取域名列表
实战案例#
案例1:企业资产发现#
任务:发现企业的所有互联网资产
执行步骤:
基本枚举
subfinder -d company.com -all -o initial_results.txt深度枚举
# 递归枚举子域名的子域名 subfinder -d company.com -all -recursive -o recursive_results.txt验证结果
cat recursive_results.txt | sort -u > final_subdomains.txt wc -l final_subdomains.txt资产分类
# 按环境分类 cat final_subdomains.txt | grep -E "prod|live" > production.txt cat final_subdomains.txt | grep -E "test|dev|staging" > non_production.txt可访问性检查
cat final_subdomains.txt | httpx -silent > accessible_subdomains.txt
案例2:安全评估前的攻击面映射#
任务:在安全评估前映射目标的完整攻击面
执行步骤:
多轮枚举
# 第一轮:使用Subfinder subfinder -d target.com -all -o subfinder_results.txt # 第二轮:使用其他工具 amass enum -d target.com -passive -o amass_results.txt # 第三轮:合并结果 cat subfinder_results.txt amass_results.txt | sort -u > all_subdomains.txt服务发现
cat all_subdomains.txt | xargs -I {} nmap -sV {}漏洞扫描
cat all_subdomains.txt | httpx -silent | nuclei -t vulnerabilities/报告生成
# 生成详细报告 echo "Total subdomains found: $(wc -l all_subdomains.txt | awk '{print $1}')" > report.txt echo "\nAccessible subdomains: $(wc -l accessible_subdomains.txt | awk '{print $1}')" >> report.txt echo "\nTop subdomains by frequency:" >> report.txt cat all_subdomains.txt | cut -d'.' -f1 | sort | uniq -c | sort -rn | head -10 >> report.txt
总结#
Subfinder是一款快速、被动的子域名发现工具,专注于从各种公共数据源中收集子域名信息。通过本教程的学习,您应该能够:
- 入门级:掌握基本的子域名枚举和简单的被动收集
- 初级:了解数据源配置和结果格式化
- 中级:使用高级枚举选项和DNS解析配置
- 中上级:掌握攻击面映射和批量操作
- 高级:进行大规模枚举和结果分析
- 大师级:创建自定义配置和模块,以及处理复杂的攻击场景
Subfinder的优势在于其速度快、资源占用低、支持多种数据源。在实际使用中,Subfinder常常与其他工具结合使用,以获得更全面的子域名枚举结果。