recon-subdomain について
サブドメインの発見と DNS 調査を行うセキュリティ偵察スキルです。subfinder、dnsx、amass などを使うパッシブおよびアクティブな手順を扱い、許可を得たテストを前提とします。
主な機能
- 01パッシブおよびアクティブなサブドメイン発見
- 02DNS 解決とレコードの確認
- 03ワイルドカードの検出と除外
- 04ワードリストによるサブドメイン総当たり
- 05複数ツールの併用と結果保存
活用シーン
- 01許可された範囲のサブドメインを把握
- 02発見したホストの名前解決を確認
- 03DNS レコードとワイルドカード応答を調査
- 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- 標準エラー出力を抑制します(任意)
例:
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 wordlists |
使用例:
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- サブドメインを含むファイル(1 行に 1 件、省略可。指定しない場合は標準入力から読み込みます)
データベースの場所: ./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- サブドメインのワイルドカードテスト用パターン