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:企业资产发现#

任务:发现企业的所有互联网资产

执行步骤

  1. 基本枚举

    subfinder -d company.com -all -o initial_results.txt
  2. 深度枚举

    # 递归枚举子域名的子域名
    subfinder -d company.com -all -recursive -o recursive_results.txt
  3. 验证结果

    cat recursive_results.txt | sort -u > final_subdomains.txt
    wc -l final_subdomains.txt
  4. 资产分类

    # 按环境分类
    cat final_subdomains.txt | grep -E "prod|live" > production.txt
    cat final_subdomains.txt | grep -E "test|dev|staging" > non_production.txt
  5. 可访问性检查

    cat final_subdomains.txt | httpx -silent > accessible_subdomains.txt

案例2:安全评估前的攻击面映射#

任务:在安全评估前映射目标的完整攻击面

执行步骤

  1. 多轮枚举

    # 第一轮:使用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
  2. 服务发现

    cat all_subdomains.txt | xargs -I {} nmap -sV {}
  3. 漏洞扫描

    cat all_subdomains.txt | httpx -silent | nuclei -t vulnerabilities/
  4. 报告生成

    # 生成详细报告
    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是一款快速、被动的子域名发现工具,专注于从各种公共数据源中收集子域名信息。通过本教程的学习,您应该能够:

  1. 入门级:掌握基本的子域名枚举和简单的被动收集
  2. 初级:了解数据源配置和结果格式化
  3. 中级:使用高级枚举选项和DNS解析配置
  4. 中上级:掌握攻击面映射和批量操作
  5. 高级:进行大规模枚举和结果分析
  6. 大师级:创建自定义配置和模块,以及处理复杂的攻击场景

Subfinder的优势在于其速度快、资源占用低、支持多种数据源。在实际使用中,Subfinder常常与其他工具结合使用,以获得更全面的子域名枚举结果。