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. 03DNS レコードとワイルドカード応答を調査
  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 - 標準エラー出力を抑制します(任意)

例:

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 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"
}

ヒントとベストプラクティス

  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 - サブドメインを含むファイル(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 - サブドメインのワイルドカードテスト用パターン

コメント