关于 recon-subdomain
用于发现子域名和检查 DNS 的安全侦察技能,整合 subfinder、dnsx 和 amass 等工具的被动与主动流程。测试应获得授权。
主要功能
- 01被动与主动子域名发现
- 02DNS 解析和记录检查
- 03通配符检测与过滤
- 04基于词表的子域名暴力枚举
- 05组合工具并保存结果
适用场景
- 01梳理授权范围内的子域名
- 02验证发现的主机是否可解析
- 03查找 DNS 记录和通配符响应
- 04合并枚举结果以便分析
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ crazymarky/ pentest-skills --skill recon-subdomain安装后在 Claude Code 中输入/recon-subdomain确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/resolvers.txtsubdomains-top5k.txtwildcard-test.txtreferences/amass_guide.mddns_techniques.mddnsx_guide.mdsubfinder_guide.mdscripts/filter_resolved.pymerge_subdomains.pysubdomain_stats.pysubdomain_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/
工具选择指南
| 场景 | 推荐工具 | 命令 |
|---|---|---|
| 快速被动发现 | subfinder | subfinder -d <domain> -o subs.txt |
| 全面枚举 | amass | amass enum -d <domain> -o subs.txt |
| 验证 DNS 解析 | dnsx | dnsx -l subs.txt -o resolved.txt |
| 搜索证书 | subfinder (crtsh) | subfinder -d <domain> -sources crtsh |
| 暴力枚举 | puredns | puredns bruteforce wordlist.txt <domain> |
| 处理通配符 | puredns | puredns discard wildcards.txt < subs.txt |
| 简单替代方案 | assetfinder | assetfinder --subs-only <domain> |
工具对比:
| 工具 | 速度 | 覆盖范围 | 被动 | 主动 | 用途 |
|---|---|---|---|---|---|
| subfinder | 快 | 良好 | 是 | 有限 | 快速发现 |
| amass | 慢 | 极佳 | 是 | 是 | 全面枚举 |
| assetfinder | 极快 | 基础 | 是 | 否 | 快速检查 |
| puredns | 快 | 不适用 | 否 | 是 | 暴力枚举 |
常用词表
子域名暴力破解词表:
| 词表 | 大小 | 来源 |
|---|---|---|
| subdomains-top1million-5k | 5,000 | SecLists |
| subdomains-top1million-20k | 20,000 | SecLists |
| subdomains-top1million-500k | 500,000 | SecLists |
| DNS-Jaded-Top.txt | ~10,000 | Assetnote 词表 |
示例用法:
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"
}
提示与最佳实践
- 从被动方式开始 - 先使用被动方法,以避免被检测到
- 组合使用工具 - 没有任何单一工具能发现所有内容
- 检查通配符 - 通配符 DNS 可能会影响结果
- 验证解析结果 - 并非所有发现的子域名都能解析
- 速率限制 - 谨慎执行主动查询,以避免被屏蔽
- 保存结果 - 保留中间结果以供分析
场景:持久化存储子域名枚举结果
如果需要将子域名发现结果持久化到数据库:
# 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