mcpField
R
recon-subdomain

recon-subdomain

github.com/crazymarky安全34978 次安装21 周前更新
代码仓库

关于 recon-subdomain

用于发现子域名和检查 DNS 的安全侦察技能,整合 subfinder、dnsx 和 amass 等工具的被动与主动流程。测试应获得授权。

主要功能

  1. 01被动与主动子域名发现
  2. 02DNS 解析和记录检查
  3. 03通配符检测与过滤
  4. 04基于词表的子域名暴力枚举
  5. 05组合工具并保存结果

适用场景

  1. 01梳理授权范围内的子域名
  2. 02验证发现的主机是否可解析
  3. 03查找 DNS 记录和通配符响应
  4. 04合并枚举结果以便分析

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/crazymarky/pentest-skills --skill recon-subdomain

安装后在 Claude Code 中输入/recon-subdomain确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
resolvers.txt
subdomains-top5k.txt
wildcard-test.txt
references/
amass_guide.md
dns_techniques.md
dnsx_guide.md
subfinder_guide.md
scripts/
filter_resolved.py
merge_subdomains.py
subdomain_stats.py
subdomain_storage.py

详细介绍

子域名枚举 / DNS 侦察

授权警告

**重要:**未经适当授权进行子域名枚举可能违反服务条款。请务必确保已获得:

  • 目标域名所有者的书面许可
  • 明确的授权测试范围
  • 符合当地法规

前提条件

系统必须安装以下工具:

  • subfinder - go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
  • dnsx - go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@latest

可选工具:

  • amass - go install -v github.com/owasp-amass/amass/v4/cmd/amass@latest
  • assetfinder - go install github.com/tomnomnom/assetfinder@latest
  • puredns - go install github.com/d3mondev/puredns/v2@latest

快速入门

最常用的子域名枚举命令:

快速发现子域名(Subfinder)
subfinder -d example.com -o subs.txt
子域名发现 + DNS 解析
subfinder -d example.com -silent | dnsx -silent -resp > resolved_subs.txt
全面枚举子域名(Amass)
amass enum -passive -d example.com -o amass_subs.txt
组合使用多个工具
subfinder -d example.com -silent | tee subs1.txt && \
assetfinder --subs-only example.com | tee subs2.txt && \
cat subs1.txt subs2.txt | sort -u > all_subs.txt

常见场景

场景 1:快速被动发现子域名

需要快速发现子域名,且不进行直接交互时:

subfinder -d example.com -o subs.txt

参数:

  • -d example.com - 目标域名
  • -o subs.txt - 输出文件
  • -silent - 禁止输出 stderr(可选)

示例:

subfinder -d target.com -o target_subs.txt
subfinder -d target.com -silent | head -20

场景 2:主动枚举子域名

需要全面主动枚举时:

amass enum -active -d example.com -o amass_active.txt

参数:

  • -active - 主动枚举(直接发送 DNS 查询)
  • -d example.com - 目标域名
  • -o amass_active.txt - 输出文件

示例:

amass enum -active -d target.com -o target_amass.txt

被动模式(不发送直接查询):

amass enum -passive -d example.com -o amass_passive.txt

场景 3:解析已发现子域名的 DNS

已有子域名列表,需要验证其中哪些可以解析时:

dnsx -l subs.txt -o resolved.txt

参数:

  • -l subs.txt - 包含子域名的输入文件
  • -o resolved.txt - 输出文件
  • -resp - 在输出中包含 DNS 响应
  • -json - 以 JSON 格式输出

示例:

dnsx -l target_subs.txt -o resolved.txt -resp

包含响应详情:

dnsx -l subs.txt -resp -json -o resolved.json

场景 4:枚举 DNS 记录

需要收集特定 DNS 记录时:

# A records
dnsx -l subs.txt -a -only-a

# AAAA records (IPv6)
dnsx -l subs.txt -aaaa -only-aaaa

# CNAME records
dnsx -l subs.txt -cname -only-cname

# TXT records
dnsx -l subs.txt -txt -only-txt

# MX records
dnsx -l subs.txt -mx -only-mx

# All records
dnsx -l subs.txt -a -aaaa -cname -mx -txt -ns -soa

场景 5:检测通配符

目标具有通配符 DNS 记录时:

# Detect wildcard subdomains
puredns discard wildcards.txt < subs.txt > valid_subs.txt

使用 dnsx 的替代方法:

# Test for wildcard
echo "randomtest12345.example.com" | dnsx -silent
# If resolves, wildcard exists

# Remove wildcard responses
dnsx -l subs.txt -silent -rcode,noerror | grep -v "randomtest"

场景 6:暴力枚举子域名

需要通过字典列表发现子域名时:

# Using puredns
puredns bruteforce wordlist.txt example.com | tee brute_subs.txt

常用字典列表:

# SecLists
puredns bruteforce /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt example.com

场景 7:使用多种工具枚举

组合使用多种工具以获得最大覆盖范围:

# Create output file
> all_subs.txt

# Run subfinder
subfinder -d example.com -silent >> all_subs.txt

# Run assetfinder
assetfinder --subs-only example.com >> all_subs.txt

# Run amass (passive)
amass enum -passive -d example.com >> all_subs.txt

# Sort and deduplicate
sort -u all_subs.txt -o all_subs.txt

场景 8:搜索证书透明度日志

从 SSL/TLS 证书中查找子域名:

# Using crt.sh (web)
curl -s "https://crt.sh/?q=%.example.com&output=json" | \
  jq -r '.[].name_value' | sort -u > ct_subs.txt

# Using subfinder (CT integration)
subfinder -d example.com -sources crtsh -o ct_subs.txt

场景 9:DNS 区域传送

尝试区域传送(成功率很低,但值得一试):

# Try zone transfer
dig axfr @ns1.example.com example.com

# With specific nameserver
host -t axfr example.com ns1.example.com

场景 10:检测子域名接管

检查是否存在悬空 DNS 记录:

# Using subjack
subjack -w subs.txt -t 100 -timeout 10 -o takeovers.txt

# Using nuclei (requires templates)
nuclei -l subs.txt -t /path/to/takeover-templates/

工具选择指南

场景推荐工具命令
快速被动发现subfindersubfinder -d <domain> -o subs.txt
全面枚举amassamass enum -d <domain> -o subs.txt
验证 DNS 解析dnsxdnsx -l subs.txt -o resolved.txt
搜索证书subfinder (crtsh)subfinder -d <domain> -sources crtsh
暴力枚举purednspuredns bruteforce wordlist.txt <domain>
处理通配符purednspuredns discard wildcards.txt < subs.txt
简单替代方案assetfinderassetfinder --subs-only <domain>

工具对比:

工具速度覆盖范围被动主动用途
subfinder快良好是有限快速发现
amass慢极佳是是全面枚举
assetfinder极快基础是否快速检查
puredns快不适用否是暴力枚举

常用词表

子域名暴力破解词表:

词表大小来源
subdomains-top1million-5k5,000SecLists
subdomains-top1million-20k20,000SecLists
subdomains-top1million-500k500,000SecLists
DNS-Jaded-Top.txt~10,000Assetnote 词表

示例用法:

puredns bruteforce /path/to/subdomains-top1million-5000.txt example.com

工作流示例

完整的子域名枚举工作流:

# 1. Passive enumeration
subfinder -d target.com -silent > passive.txt
amass enum -passive -d target.com >> passive.txt
assetfinder --subs-only target.com >> passive.txt
sort -u passive.txt -o passive.txt

# 2. Resolve subdomains
dnsx -l passive.txt -silent -o resolved.txt

# 3. Check for alive HTTP services
cat resolved.txt | httpx -silent -status-code -title > alive.txt

# 4. Brute force (optional)
puredns bruteforce wordlist.txt target.com > brute.txt
dnsx -l brute.txt -silent >> resolved.txt

# 5. Final sorted list
sort -u resolved.txt -o final_subs.txt

输出格式

Subfinder JSON 输出
subfinder -d example.com -json -o subs.json

JSON 结构:

{
  "host": "sub.example.com",
  "source": "crtsh"
}
Dnsx JSON 输出
dnsx -l subs.txt -json -o resolved.json

JSON 结构:

{
  "host": "sub.example.com",
  "a": ["1.2.3.4"],
  "aaaa": [],
  "cname": [],
  "status": "resolved"
}

提示与最佳实践

  1. 从被动方式开始 - 先使用被动方法,以避免被检测到
  2. 组合使用工具 - 没有任何单一工具能发现所有内容
  3. 检查通配符 - 通配符 DNS 可能会影响结果
  4. 验证解析结果 - 并非所有发现的子域名都能解析
  5. 速率限制 - 谨慎执行主动查询,以避免被屏蔽
  6. 保存结果 - 保留中间结果以供分析

场景:持久化存储子域名枚举结果

如果需要将子域名发现结果持久化到数据库:

# Store from file (flat hierarchy)
subfinder -d example.com | python .claude/skills/recon-subdomain/scripts/subdomain_storage.py

# Store from file with subsystem
subfinder -d example.com | python .claude/skills/recon-subdomain/scripts/subdomain_storage.py \
  --subsystem "External Infrastructure"

# Store from file (alternative)
python .claude/skills/recon-subdomain/scripts/subdomain_storage.py \
  --input-file subdomains.txt \
  --subsystem "Customer A"

参数:

  • --subsystem - 子系统名称(可选;省略则使用扁平层级结构)
  • --input-file - 包含子域名的文件(每行一个,可选;若未提供,则从标准输入读取)

数据库位置: ./data/results.db

相关技能: results-storage - 查询数据、生成报告


资源

脚本
  • scripts/merge_subdomains.py - 合并多个子域名列表并去重
  • scripts/filter_resolved.py - 使用自定义解析逻辑筛选已解析的子域名
  • scripts/subdomain_stats.py - 生成已发现子域名的统计数据
参考资料
  • references/subfinder_guide.md - 全面的 subfinder 参考指南
  • references/amass_guide.md - 详细的 amass 用法文档
  • references/dnsx_guide.md - DNS 解析工具参考指南
  • references/dns_techniques.md - 高级 DNS 枚举技术
资源文件
  • assets/subdomains-top1m-5k.txt - 5,000 个常见子域名词条
  • assets/resolvers.txt - 可信 DNS 解析器列表
  • assets/wildcard-test.txt - 子域名通配符测试模式

评论

支持 Markdown