目录

flowchart TB
    subgraph 被动发现
        A1[amass enum -passive] --> P[被动结果集]
        A2[subfinder -all] --> P
        A3[assetfinder] --> P
    end

    subgraph 主动发现
        A4[amass enum -active] --> Q[主动结果集]
        A5[amass enum -brute] --> Q
        A6[amass intel -d] --> Q
    end

    P --> R[合并去重<br/>sort -u]
    Q --> R
    R --> S[httpx 存活验证]
    S --> T[技术栈检测]
    S --> U[登录页筛选]
    S --> V[amass viz 可视化]

    style A1 fill:#4a90d9,color:#fff
    style A2 fill:#4a90d9,color:#fff
    style A3 fill:#4a90d9,color:#fff
    style R fill:#e6a23c,color:#fff
    style S fill:#67c23a,color:#fff

一、工具概览与对比

在红队侦察阶段,子域名发现是最关键的环节之一。一个组织可能在主域名下部署了数十甚至数百个子域名,其中往往包含测试环境、开发服务器、老旧系统等安全防护薄弱的入口点。

相关模块: 信息收集基础 | DNS 侦察 | OSINT 技术

本教程涉及的三个工具各有侧重:

功能amasssubfinderassetfinder
被动枚举支持支持支持
主动枚举支持不支持不支持
暴力破解支持不支持不支持
API 密钥支持支持支持不支持
可视化支持 (D3.js)不支持不支持
速度
结果数量
持续监控支持不支持不支持

二、amass — OWASP 资产发现工具

2.1 安装与子命令

在 ArchStrike 上安装:

sudo pacman -S amass
amass -version

amass 的主要子命令:

子命令功能
amass enum枚举子域名(核心功能)
amass intel情报收集(发现相关域名、ASN、CIDR)
amass db数据库管理(查看、导入导出发现结果)
amass viz可视化资产关系图
amass track持续监控域名变化(对比历史结果)

2.2 被动枚举

被动枚举不直接与目标交互,仅通过公开数据源收集信息:

amass enum -passive -d example.com
amass enum -passive -d example.com -o passive_results.txt -dir ./amass_output
参数说明
-passive仅使用被动源(不直接查询目标 DNS)
-d目标域名
-o输出文件路径
-dir指定 amass 数据存储目录(保存到数据库供后续查询)

2.3 主动枚举

主动枚举会直接查询目标 DNS 服务器,并结合被动源:

amass enum -active -d example.com -o active_results.txt
amass enum -active -d example.com -p 80,443,8080 -o active_results.txt
参数说明
-p指定扫描端口(默认 443 和 80,添加 8080 可以发现更多 Web 服务)

2.4 综合扫描

结合所有技术进行深度扫描:

amass enum -d example.com \
  -src \
  -ip \
  -brute \
  -min-for-recursive 2 \
  -o comprehensive.txt \
  -dir ./amass_db
参数说明
-src标注每个子域名的发现来源
-ip显示每个子域名对应的 IP 地址
-brute启用字典暴力破解
-w /path/dict使用自定义字典
-min-for-recursive设置递归阈值
-max-dns-queries限制 DNS 查询速率

2.5 API 密钥配置

许多数据源需要 API 密钥才能发挥全部能力:

mkdir -p ~/.config/amass
nano ~/.config/amass/config.ini

配置文件内容示例:

[data_sources]
[data_sources.Shodan]
apikey = YOUR_SHODAN_API_KEY
[data_sources.Censys]
apikey = YOUR_CENSYS_API_ID
secret = YOUR_CENSYS_API_SECRET
[data_sources.SecurityTrails]
apikey = YOUR_SECURITYTRAILS_API_KEY
[data_sources.VirusTotal]
apikey = YOUR_VIRUSTOTAL_API_KEY
[data_sources.GitHub]
apikey = YOUR_GITHUB_TOKEN

使用配置文件执行扫描:

amass enum -d example.com -config ~/.config/amass/config.ini

免费 API 密钥获取地址:

数据源注册地址
Shodanhttps://account.shodan.io
SecurityTrailshttps://securitytrails.com
VirusTotalhttps://virustotal.com

2.6 情报收集 — intel 子命令

在枚举之前,先用 intel 子命令扩大攻击面:

amass intel -d example.com
amass intel -d example.com -whois
amass intel -d example.com -o associated_domains.txt

输出信息:

  1. 发现的相关域名(通过 SSL 证书、Whois、ASN 关联)
  2. 目标拥有的 ASN 编号
  3. 目标拥有的 IP 段 (CIDR)
  4. 反向 Whois 查询结果

2.7 数据库管理

amass 将所有发现保存在本地 Graph 数据库中,可随时查询:

amass db -d example.com -show       # 显示该域名的所有发现
amass db -d example.com -show -ip   # 显示 IP 相关数据
amass db -list                       # 列出数据库中扫描过的所有域名
amass db -d example.com -names       # 仅列出子域名(不含 IP 等)

2.8 可视化

生成 D3.js 可视化关系图:

amass viz -d example.com -d3
firefox amass_d3.html &

图表展示:

  • 域名之间的关联关系(圆点=子域名,颜色表示不同来源)
  • SSL 证书共享关系
  • 域名到 IP 的映射关系
  • WhoIs 关联

2.9 持续监控

跟踪域名的变化:

amass track -d example.com -last 2    # 对比最近 2 次扫描的差异
amass track -d example.com -history   # 显示所有历史记录

三、subfinder — 快速被动子域名发现

3.1 安装与基本使用

sudo pacman -S subfinder
 
subfinder -d example.com
subfinder -d example.com -o subfinder_output.txt
subfinder -dL domains.txt -o all_subs.txt

3.2 高级参数与 API 配置

subfinder -d example.com \
  -all \
  -silent \
  -o subfinder_output.txt \
  -oI \
  -timeout 5 \
  -max-time 10
参数说明
-all使用所有数据源(包括需要 API 密钥的)
-silent静默模式(仅输出子域名)
-oI仅输出 IPv4 对应的子域名
-timeout超时时间(秒)
-max-time该扫描最大执行时间(分钟)

subfinder 的配置文件位于 ~/.config/subfinder/provider-config.yaml,编辑此文件添加各数据源的 API 密钥:

shodan: [YOUR_API_KEY]
virustotal: [YOUR_API_KEY]
securitytrails: [YOUR_API_KEY]
chaos: [YOUR_API_KEY]
github: [YOUR_GITHUB_TOKEN]

常用数据源: crtsh, dnsdumpster, alienvault, censys, github, shodan, virustotal, waybackarchive。

列出所有可用数据源:

subfinder -list

四、assetfinder — 轻量级资产发现

sudo pacman -S assetfinder
 
assetfinder example.com
assetfinder example.com | tee assetfinder_output.txt

assetfinder 特点:

  • 极其轻量,适合快速扫描
  • 主要利用 Certificate Transparency 日志、crt.sh
  • 结合 httprobe 可以快速发现活跃 Web 服务:
assetfinder example.com | httprobe -c 50 > live_subs.txt

与其他工具链结合:

assetfinder example.com | sort -u | while read sub; do
  curl -s -o /dev/null -w "%{http_code}" "http://$sub"
  echo "  $sub"
done

五、三工具结果整合与对比

5.1 执行三工具扫描

amass enum -passive -d example.com -o amass_subs.txt
subfinder -d example.com -silent -o subfinder_subs.txt
assetfinder example.com | tee assetfinder_subs.txt

5.2 合并结果并去重

cat amass_subs.txt subfinder_subs.txt assetfinder_subs.txt | sort -u > all_subs.txt
wc -l all_subs.txt

5.3 分析各工具独有发现

# amass 独有的子域名
comm -23 <(sort amass_subs.txt) <(sort subfinder_subs.txt assetfinder_subs.txt | sort -u)
 
# subfinder 独有的子域名
comm -23 <(sort subfinder_subs.txt) <(sort amass_subs.txt assetfinder_subs.txt | sort -u)
 
# assetfinder 独有的子域名
comm -23 <(sort assetfinder_subs.txt) <(sort amass_subs.txt subfinder_subs.txt | sort -u)
 
# 三个工具都发现的子域名(交集)
comm -12 <(sort amass_subs.txt) <(sort subfinder_subs.txt | sort) | comm -12 - <(sort assetfinder_subs.txt)

5.4 验证子域名存活状态

cat all_subs.txt | httpx -silent -status-code -title -tech-detect -o live_assets.txt

5.5 筛选重要资产

# 筛选带有登录页面的子域名
cat all_subs.txt | httpx -silent -match-string "login" -o login_pages.txt
 
# 筛选使用特定技术的子域名
cat all_subs.txt | httpx -silent -tech-detect | grep -i "wordpress" > wordpress_sites.txt

六、完整实践流程

目标: tesla.com (仅供教学演示)

# Step 1: 创建项目目录,开始被动枚举
mkdir ~/recon-tesla && cd ~/recon-tesla
amass enum -passive -d tesla.com -o tesla_passive.txt -dir ./amass_db
 
# Step 2: 执行 amass 情报收集
amass intel -d tesla.com -o tesla_intel.txt
 
# Step 3: 对主域名执行深入主动枚举
amass enum -active -d tesla.com -o tesla_active.txt -dir ./amass_db -ip -src
 
# Step 4: 暴力破解子域名
amass enum -d tesla.com -brute -w /usr/share/amass/wordlists/subdomains.lst -o tesla_brute.txt
 
# Step 5: 使用 subfinder 补充被动发现
subfinder -d tesla.com -all -silent -o tesla_subfinder.txt
 
# Step 6: 使用 assetfinder 快速补充
assetfinder tesla.com | tee tesla_assetfinder.txt
 
# Step 7: 合并去重
cat tesla_passive.txt tesla_active.txt tesla_brute.txt tesla_subfinder.txt tesla_assetfinder.txt | sort -u > tesla_all_subs.txt
wc -l tesla_all_subs.txt
 
# Step 8: 查看 amass 数据库中的完整发现
amass db -d tesla.com -show
amass db -d tesla.com -names
 
# Step 9: 验证活跃 Web 服务
cat tesla_all_subs.txt | httpx -silent -status-code -title -o tesla_live.txt
 
# Step 10: 生成可视化资产图
amass viz -d tesla.com -d3

重点关注的目标特征:

  • 状态码 200 且有登录页面的子域名
  • 状态码 401/403(存在 Web 服务但需要认证)
  • 带有 dev, staging, test, admin, portal, api 前缀
  • 状态码 500+ 的子域名(可能存在配置问题)

七、常见问题与排错

问题解决方案
amass 报告 “too many DNS queries”使用 --max-dns-queries 3 限制速率
subfinder 结果很少检查 provider-config.yaml,添加 API 密钥
assetfinder 只返回几个结果主要依赖 crt.sh,冷门域名结果少是正常的
扫描时间太长先用 amass passive + subfinder 快速获得结果,再针对性 active
目标使用 Cloudflare/WAF1. SSL 证书透明度日志 (crt.sh) 绕过 CDN
2. 历史 DNS 记录 (SecurityTrails)
3. 暴力破解 + 反向 DNS 查询
4. amass -asn 查询同 ASN 下其他 IP

八、自动化脚本示例

#!/bin/bash
# recon.sh - 自动子域名发现脚本
TARGET=$1
 
if [ -z "$TARGET" ]; then
  echo "用法: ./recon.sh example.com"
  exit 1
fi
 
mkdir -p recon_$TARGET && cd recon_$TARGET
 
echo "[+] amass 被动枚举..."
amass enum -passive -d $TARGET -o amass_passive.txt 2>/dev/null &
 
echo "[+] subfinder 枚举..."
subfinder -d $TARGET -silent -o subfinder.txt 2>/dev/null &
 
echo "[+] assetfinder 枚举..."
assetfinder $TARGET | tee assetfinder.txt 2>/dev/null &
 
wait
 
echo "[+] 合并去重..."
cat amass_passive.txt subfinder.txt assetfinder.txt | sort -u > all_subs.txt
echo "[+] 共发现 $(wc -l < all_subs.txt) 个子域名"
 
echo "[+] 验证存活..."
cat all_subs.txt | httpx -silent -status-code -title -o live.txt 2>/dev/null
echo "[+] 活跃 Web 服务: $(wc -l < live.txt) 个"
 
echo "[+] 完成! 结果在 recon_$TARGET/ 目录中"

单一工具永远无法发现全部子域名。amass + subfinder + assetfinder 三管齐下,结合 Certificate Transparency、DNS 暴力破解和 API 数据源,才能构建最完整的资产图谱。红队侦察的一般原则是”能发现多少发现多少”——被遗忘的子域名或老旧服务器往往是最薄弱的入口点。

← 返回总目录