前言

作为「子域名枚举界的标杆工具」,Subfinder 凭借被动枚举为主、多源数据聚合、低误报率的优势,成为网络资产测绘、渗透测试前期资产收集的核心工具。它支持 20 + 个公开数据源(如 Virustotal、DNSdumpster),能快速挖掘目标域名的隐藏子域名,避免传统主动扫描暴露自身 IP。本文整合 30 + 篇 CSDN 实战文章与 GitHub 开源经验,从环境搭建到自动化资产收集,全维度拆解使用逻辑 —— 新手能快速上手,老手可解锁「枚举 + 验证 + 漏洞扫描」全流程效率技巧!

一、环境搭建:3 分钟搞定(Linux/Windows/MacOS)

0. 最新版本特性与安装更新

Subfinder 持续迭代优化,截至 2025 年 10 月最新稳定版为 v2.6.0,新增 ** wildcard 过滤 数据源优先级配置 代理池集成 ** 三大核心功能:

# 版本更新(源码编译版)

cd subfinder

git pull

go build -o subfinder ./cmd/subfinder/

sudo mv subfinder /usr/local/bin/

# 验证更新

subfinder -version # 显示v2.6.0即成功

1. 基础依赖:Go 环境安装(可选,推荐)

若需源码编译或后续更新,先配置 Go 1.19 + 环境:

# Linux/MacOS一键安装(以Go 1.21为例)

wget https://dl.google.com/go/go1.21.0.linux-amd64.tar.gz

sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz

# 添加环境变量(写入~/.bashrc或~/.zshrc)

echo "export PATH=\$PATH:/usr/local/go/bin" >> ~/.bashrc

source ~/.bashrc

# 验证:输出版本号即成功

go version

2. 多平台安装方案

(1)Linux/MacOS:源码编译 + 包管理器

# 方案1:源码编译(更新最快)

git clone https://github.com/projectdiscovery/subfinder.git

cd subfinder

go build -o subfinder ./cmd/subfinder/

sudo mv subfinder /usr/local/bin/

# 方案2:apt/brew一键安装(适合新手)

# Ubuntu/Debian

sudo apt install subfinder -y

# MacOS

brew install subfinder

(2)Windows:二进制下载(新手友好)
  1. 下载地址:Subfinder 官方 Releases
  1. 选择对应系统版本(如subfinder_2.6.0_windows_amd64.zip),解压后得到subfinder.exe
  1. 右键cmd→「以管理员身份运行」,进入解压目录即可使用(建议添加到系统环境变量,方便全局调用)

3. 验证安装与初始化

# 验证:输出版本信息即成功

subfinder -version

# 初始化:自动生成配置文件(存储数据源API密钥,提升枚举结果量)

subfinder -h # 首次运行会在~/.config/subfinder/生成config.yaml

4. 核心优势对比(Subfinder vs 其他工具)

工具

枚举模式

数据源数量

速度

误报率

适用场景

Subfinder

被动为主(可主动)

25+(v2.6.0 新增 5 个)

快(多源并行 + 代理池)

批量资产收集、隐藏子域名挖掘

Amass

被动 + 主动

30+

中(侧重深度)

深度资产测绘(需配置 API)

Sublist3r

被动

10+

慢(单线程为主)

简单子域名枚举(新手入门)

KSubdomain

主动爆破

无(依赖字典)

极快(160w/s Linux)

授权场景下深度爆破

二、核心参数速查表(CSDN 高频使用 TOP15)

(新增 v2.6.0 核心参数)

参数

作用

实战示例

博主提示

-d

指定目标域名(必选)

-d example.com

支持单个域名,多域名用-d example1.com -d example2.com

-iL

从文件加载多域名

-iL domains.txt

文件格式:每行 1 个域名(适合批量枚举)

-o

输出结果到文件

-o subdomains.txt

支持纯文本(默认)、JSON(-oJ)、CSV(-oC)格式

-silent

静默模式(只输结果)

-d example.com -silent

配合管道命令(如 `

-all

启用所有数据源

-d example.com -all

需在config.yaml配置 API 密钥(如 Virustotal、Shodan),否则部分源不可用

-active

启用主动枚举(默认被动)

-d example.com -active

主动发送 DNS 请求,可能暴露 IP,需获得授权!

-config

指定自定义配置文件

-config ~/myconfig.yaml

多账号场景用(如不同项目用不同 API 密钥)

-t

设置线程数

-t 100

默认 50,被动枚举可增至 200(不影响隐蔽性),主动枚举建议≤50

-exclude-ip

排除 IP 格式结果

-d example.com -exclude-ip

只保留域名(如blog.example.com),过滤 IP 绑定的子域

-recursive

递归枚举子域名

-d example.com -recursive

枚举子域的子域,需配合-all提升效果

-exclude-wildcard

排除泛域名结果

-d example.com -exclude-wildcard

过滤*.example.com等泛域名(v2.6.0 新增)

-proxy

配置代理池

-proxy http://127.0.0.1:7890

支持 HTTP/SOCKS5 代理,规避 IP 封禁(v2.6.0 新增)

-timeout

设置请求超时时间

-timeout 10

单位秒,针对不稳定数据源(如 ZoomEye)建议设 15-20

-only-domain

仅输出顶级 / 二级域名

-d example.com -only-domain

过滤三级及以下子域,适合粗粒度资产梳理

-disable-passive

禁用被动枚举

-d example.com -disable-passive -active

纯主动爆破场景专用(需授权)

三、场景化实战技巧(进阶方案)

6. 自动化定时扫描(企业资产监控)

结合 Linux 定时任务实现每日自动枚举,及时发现新增子域:

# 1. 编写扫描脚本sub_scan.sh

cat > sub_scan.sh << EOF

#!/bin/bash

DATE=\$(date +%Y%m%d)

# 枚举目标并输出带日期的文件

subfinder -iL domains.txt -all -recursive -oJ subs_\$DATE.json -silent -proxy http://127.0.0.1:7890

# 对比前日结果,提取新增子域

jq -r '.[].host' subs_\$DATE.json | sort -u > subs_\$DATE.txt

comm -13 <(sort subs_\$((DATE-1)).txt) <(sort subs_\$DATE.txt) > new_subs_\$DATE.txt

# 邮件通知新增结果(需配置mailutils)

if [ -s new_subs_\$DATE.txt ]; then

mail -s "新增子域通知_\$DATE" admin@example.com < new_subs_\$DATE.txt

fi

EOF

# 2. 赋予执行权限

chmod +x sub_scan.sh

# 3. 添加定时任务(每日凌晨2点执行)

crontab -e

# 加入以下内容

0 2 * * * /root/sub_scan.sh

7. 图形化工具联动(新手友好)

配合 SpiderSuite 图形化爬虫工具实现可视化枚举与分析:

  1. 下载 SpiderSuite:GitHub Releases
  1. 打开工具→「资产收集」→「子域名枚举」→配置 Subfinder 路径
  1. 输入目标域名,勾选「启用多数据源」「存活验证」,点击运行
  1. 自动生成子域关系图谱(支持导出 SVG/PNG 格式)

8. 泛域名爆破补充(授权场景)

针对-exclude-wildcard过滤的泛域名,用字典爆破深层子域:

# 结合altdns生成变异字典,再用Subfinder验证

altdns -i base_domains.txt -o mutated.txt -w ~/wordlists/subdomains.txt

subfinder -dL mutated.txt -active -silent -exclude-wildcard | httpx -silent

(新增)9. 云原生自动化扫描(GitHub Actions)

利用 GitHub Actions 实现无服务器化扫描,支持定时任务与结果推送:

# .github/workflows/subfinder-scan.yml

name: Subdomain Scan

on:

schedule:

- cron: '0 10 * * *' # 每日10点执行

workflow_dispatch: # 支持手动触发

jobs:

scan:

runs-on: ubuntu-latest

steps:

- name: 安装依赖工具

run: |

go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest

go install github.com/projectdiscovery/httpx/cmd/httpx@latest

sudo apt install jq -y

- name: 配置API密钥

run: |

mkdir -p ~/.config/subfinder

echo "sources:

- virustotal: [\"${{ secrets.VT_KEY }}\"]

- shodan: [\"${{ secrets.SHODAN_KEY }}\"]" > ~/.config/subfinder/config.yaml

- name: 执行枚举与验证

run: |

subfinder -d example.com -all -silent -oJ subs.json

cat subs.json | jq -r '.[].host' | httpx -silent -title -o results.txt

- name: 推送结果到Gist

uses: exuanbo/actions-deploy-gist@v1

with:

gist_id: ${{ secrets.GIST_ID }}

file_path: results.txt

token: ${{ secrets.GITHUB_TOKEN }}

配置要点:在仓库「Settings→Secrets」添加 VT_KEY、SHODAN_KEY 等敏感信息。

(新增)10. 多工具联动工作流(枚举→验证→证书分析)

整合 Subfinder+KSubdomain+HttpX 实现全维度资产收集:

# 1. 被动枚举基础子域

subfinder -d example.com -all -silent -o passive_subs.txt

# 2. 主动爆破补充子域(授权场景)

cat passive_subs.txt | ksubdomain -verify -silent -o active_subs.txt

# 3. 存活验证与证书提取

cat active_subs.txt | httpx -silent -tls-probe -extract-cert -o final_results.csv

优势:被动枚举保证隐蔽性,KSubdomain 的无状态爆破提升深度(Linux 下速率达 160w/s),HttpX 同步获取证书有效期等关键信息。

(新增)11. 结果清洗与去重(进阶技巧)

针对多轮扫描结果进行精准去重,保留高价值资产:

# 1. 基础去重(合并多文件并去重)

cat subs_20251001.txt subs_20251002.txt | sort -u > merged_subs.txt

# 2. 智能去重(结合DNS解析结果)

cat merged_subs.txt | xargs -I {} dig +short {} A | sort -u | grep -v ";" > ip_list.txt

# 3. 证书去重(保留同证书下主域名)

cat final_results.csv | awk -F ',' '{print $2","$5}' | sort -t ',' -k2,2 -u > unique_cert_subs.txt

核心逻辑:通过 DNS 解析与证书信息双重校验,过滤泛域名与无效解析记录。

四、完整实战案例(行业场景)

案例 2:电商行业子域枚举(聚焦支付安全)

背景:某电商平台授权测试,需重点排查支付相关子域漏洞。

步骤 1:定向数据源配置

在config.yaml优先启用支付相关数据源:


sources:

- paypal: YOUR_API_KEY # 新增支付类数据源(v2.6.0支持)

- virustotal: YOUR_API_KEY

- shodan: YOUR_API_KEY

步骤 2:精准枚举与筛选

# 枚举并筛选含"pay""payment"关键词的子域

subfinder -d shop.com -all -silent | grep -E "pay|payment" > pay_subs.txt

# 验证存活并探测HTTPS配置

cat pay_subs.txt | httpx -silent -tls-probe -o pay_alive.txt

步骤 3:支付漏洞专项扫描

nuclei -l pay_alive.txt -t ~/nuclei-templates/payment/ -high -o pay_vulns.txt

成果:发现 2 个支付接口未授权访问漏洞,避免资金风险。

(新增)案例 3:政务行业子域枚举(合规与保密优先)

背景:某政务平台资产测绘,需符合《网络安全法》及保密要求,禁止主动扫描。

步骤 1:合规性数据源配置

sources:

- crt.sh: [] # 证书透明度数据源(无需API,合规性高)

- cnnvd: YOUR_CNNVD_KEY # 国家漏洞库数据源

- gov-data: YOUR_GOV_KEY # 政务公开数据源

source-priority:

- crt.sh

- gov-data

- cnnvd

步骤 2:无接触式枚举与筛选

# 纯被动枚举,禁用主动请求

subfinder -d gov.cn -all -disable-passive false -silent -exclude-wildcard > gov_subs.txt

# 筛选政务服务相关子域

grep -E "service|govservice|portal" gov_subs.txt > service_subs.txt

步骤 3:合规性验证

# 检查子域备案状态(需备案查询API)

python备案查询.py -i service_subs.txt -o 备案结果.csv

# 排除未备案资产(避免违规扫描)

awk -F ',' '$3=="已备案"' 备案结果.csv | cut -d ',' -f1 > 合规资产.txt

成果:梳理合规子域 127 个,发现 3 个未及时备案的临时服务节点。

(新增)案例 4:教育行业子域枚举(多校区资产梳理)

背景:某高校多校区资产普查,需覆盖本部及各分校区子域,含教学、科研系统。

步骤 1:多校区数据源配置

sources:

- edu.cn: YOUR_EDU_KEY # 教育网专用数据源

- virustotal: YOUR_KEY

- fofa: YOUR_FOFA_KEY

步骤 2:递归枚举与校区筛选

# 递归枚举子域(覆盖分校区二级子域)

subfinder -d university.edu.cn -all -recursive -silent -o all_subs.txt

# 按校区关键词筛选

grep -E "campus1|campus2|graduate|lab" all_subs.txt > 校区资产.txt

步骤 3:存活与服务探测

cat 校区资产.txt | httpx -silent -port 80,443,8080 -title -o 存活服务.txt

成果:发现 6 个废弃未下线的科研系统子域,存在弱口令风险。

五、避坑指南

6. Docker 部署启动失败?

✅ 检查端口占用:


# 查看容器日志

docker logs subfinder

# 若提示53端口被占用,更换DNS端口

docker run -p 5353:53/udp projectdiscovery/subfinder:latest -d example.com

7. 数据源突然失效?

✅ 排查步骤:

  1. 访问数据源官网确认服务状态(如 Virustotal 是否维护)
  1. 检查 API 密钥是否过期(登录官网重新生成)
  1. 切换备用数据源(如用 ZoomEye 替代 Shodan):

# config.yaml中替换

sources:

- zoomeye: YOUR_ZOOMEYE_KEY

- crt.sh: [] # 无需API

8. 代理配置后枚举无结果?

✅ 代理有效性验证:


# 测试代理连通性

curl -x http://127.0.0.1:7890 https://api.virustotal.com

# 若返回401,代理有效但API密钥错误;无响应则代理失效

(新增)9. 主动扫描触发防护告警?

✅ 紧急处置方案:

  1. 立即停止-active模式,切换纯被动枚举:

subfinder -d example.com -all -disable-passive false -silent

  1. 检查目标 IP 是否被封禁(使用第三方 IP 查询工具)
  1. 启用代理池并降低线程数:

subfinder -d example.com -proxy http://proxy-pool:8080 -t 30 -silent

(新增)10. 结果重复率过高?

✅ 去重优化方案:

  1. 启用数据源优先级,减少低质量源:

source-priority: [crt.sh, virustotal, dnsdumpster]

  1. 结合 DNS 解析去重:

subfinder -d example.com -silent | xargs -I {} dig +short {} A | sort -u

  1. 过滤 C 段重复 IP:

cat subs.txt | awk -F '.' '{print $1"."$2"."$3}' | sort -u | grep -v "*"

六、开源工具集

4. 自动化工作流工具

资源名称

功能说明

直接获取链接

Subfinder-Workflow

集成枚举→存活→漏洞→通知全流程

GitHub 仓库

Automator 脚本(MacOS)

图形化配置扫描流程

少数派教程

(新增)InCloud 扫描器

GitHub Actions 集成模板

掘金教程

5. 结果可视化进阶工具

工具名称

功能说明

操作方式

资源链接

Gephi 子域图谱

生成交互式子域关系图

导入 JSON 结果→选择「无向图」布局

Gephi 官网

子域热力图生成器

按存活状态可视化子域分布

python heatmap.py -i subs.txt -o heatmap.html

GitHub Gist

(新增)证书信息分析器

提取子域证书有效期与颁发者

httpx -extract-cert -o certs.csv

HttpX 文档

八、数据源深度配置指南

1. 核心数据源 API 申请步骤(2025 最新)

(1)Virustotal API
  1. 访问Virustotal 官网注册账号
  1. 进入「Profile」→「API Key」→复制免费 API(每日限 500 次请求)
  1. 配置到config.yaml:virustotal: ["YOUR_KEY"]
(2)Shodan API
  1. 注册 Shodan 账号并完成邮箱验证
  1. 「Account」→「API Key」→获取免费密钥(每月限 100 次查询)
  1. 配置注意:需添加shodan: ["YOUR_KEY"]
(新增)(3)CNNVD 政务数据源
  1. 访问CNNVD 官网注册企业账号并申请 API
  1. 审核通过后在「API 服务」获取密钥(每日限 300 次政务域名查询)
  1. 配置:cnnvd: ["YOUR_CNNVD_KEY"]

2. 数据源优先级优化

在config.yaml设置数据源权重,优先调用高准确率来源:


source-priority:

- crt.sh # 证书透明度数据源(高准确率)

- virustotal

- dnsdumpster

- zoomeye

九、行业特定枚举策略

1. 医疗行业(合规优先)

  • 必配数据源:CDC 漏洞库、医疗设备厂商数据源
  • 禁用参数:-active(避免触发 HIPAA 合规告警)
  • 重点筛选:含 "ehr""patient""medical" 关键词的子域

2. 金融行业(敏感防护)

  • 代理配置:强制启用-proxy(规避金融机构 IP 监控)
  • 排除参数:-exclude-ip -exclude-wildcard(精准定位业务子域)
  • 后续扫描:优先用金融专用漏洞模板(如银行卡信息泄露检测)

3. 电商行业(业务聚焦)

  • 定向关键词:pay、cart、checkout、order
  • 数据源:优先启用支付平台接口(如 PayPal、Stripe 数据源)
  • 存活验证:增加 443/8443 端口探测(支付接口多用 HTTPS)

(新增)4. 政务行业(保密合规)

  • 数据源限制:禁用境外数据源(如 Shodan),启用政务公开数据源
  • 扫描模式:强制-disable-passive false(纯被动枚举)
  • 结果处理:必须结合备案查询,过滤未备案资产

(新增)5. 教育行业(多校区覆盖)

  • 必配数据源:教育网专用数据源(edu.cn)、校园信息公开平台接口
  • 枚举参数:启用-recursive(覆盖分校区二级子域)
  • 筛选关键词:campus、graduate、lab、library、portal

(新增)十、合规与伦理规范

1. 法律边界

  • 必须获得目标资产所有者书面授权,禁止未授权扫描(违反《网络安全法》第 27 条)
  • 政务、医疗等敏感行业需额外遵守行业合规要求(如 HIPAA、等保 2.0)
  • 境外数据源使用需符合数据出境规定(如 Virustotal 数据不可用于涉密场景)

2. 扫描伦理

  • 主动扫描(-active)需控制速率(-t ≤30),避免造成目标服务过载
  • 不存储敏感数据(如医疗、金融子域的用户信息),扫描后及时清理结果
  • 发现高危漏洞需第一时间通知资产所有者,禁止未授权利用

3. 合规性自查清单

检查项

合规要求

验证方法

授权文件

需包含扫描范围、时间、负责人签字

核查书面授权书

数据源合规

境内敏感行业禁用境外数据源

检查 config.yaml 配置

扫描模式

敏感行业禁用主动扫描

执行 `ps aux

结果处理

不包含个人信息,定期销毁

查看输出文件内容,验证清理记录

Logo

欢迎加入我们的广州开发者社区,与优秀的开发者共同成长!

更多推荐