Shikata Ga Nai

Private? There is no such things.

第28回:サブドメイン探索と robots.txt の活用

Hello there, ('ω')ノ

1. なぜサブドメインが重要なのか?

理由 解説
攻撃面が広がる www は堅牢でも、dev.staging. は手薄なことが多い
別部署・子会社が運用 セキュリティ基準が統一されにくく“穴”が生まれやすい
ドメイン単位でスコープ指定される バグバウンティでは *.example.com が丸ごと報酬対象になるケース多数

“メインよりサブが熱い” ― これがバグハンティング界の常識です。


2. サブドメイン列挙:3段構えの王道フロー

段階 手法 主なツール・サービス
パッシブ収集 既存の公開データベースを横断検索 Subfinder / crt.sh / SecurityTrails
DNS ブルート ワードリストから辞書攻撃的に照合 massdns + wordlist(dns-Jhaddix.txt など)
OSINT 追加調査 GitHub・Pastebin・Wayback などから“文字列漏えい”を抽出 github-subdomains / gau

2.1 パッシブ収集(まずはサクッと一覧化)

subfinder -d example.com -o passive.txt
curl "https://crt.sh/?q=%25.example.com&output=json" | jq -r '.[].name_value' >> passive.txt
sort -u passive.txt > subs_stage1.txt

2.2 DNS ブルート(辞書で穴を掘る)

dnsx -l subs_stage1.txt -w dns-Jhaddix.txt -o subs_stage2.txt
  • ポイント:パッシブで得た NS/SOA レコードをヒントにすると命中率UP。

2.3 OSINT 追加調査

gau --threads 20 example.com | awk -F/ '{print $3}' >> subs_osint.txt
github-subdomains -d example.com -o github.txt
cat subs_stage2.txt subs_osint.txt github.txt | sort -u > all_subs.txt

結果 → all_subs.txt が “テスト対象候補” になります。


3. robots.txt を侮るなかれ

3.1 robots.txt とは?

  • 本来は 検索エンジンにクロール禁止ディレクトリを知らせる ファイル
  • 位置:https://<ドメイン>/robots.txt
  • フォーマット例
  User-agent: *
  Disallow: /admin/
  Disallow: /beta/

3.2 攻撃者視点:どこが“おいしい”?

行動 理由
Disallow で隠した URL を直接叩く 管理画面・開発中機能が眠っている可能性
Sitemap 行を探す XML サイトマップで大量 URL を一気に収集
複数 robots.txt を確認 サブドメインごとに配置されている場合あり → 追加ルート判明

3.3 具体的なチェック手順

for sub in $(cat all_subs.txt); do
  curl -s "https://$sub/robots.txt" | tee -a robots_all.txt
done
grep -Ei 'Disallow|Sitemap' robots_all.txt | sort -u > juicy_paths.txt

生成された juicy_paths.txt をベースに Burp Intruder で一括アクセスして 200/403 の差分をチェック!


4. 実例:robots.txt からの“連鎖発見”

  1. beta-api.example.com を robots.txt で発見
  2. エンドポイント /v2/private/ が Disallow 指定
  3. 認証なしでアクセス → JSON で内部ユーザ一覧が返る
  4. IDOR → 他人のデータ参照 → High Severity 報告 & 報酬ゲット!

5. 注意点とよくあるミス

ミス 回避策
スコープ外サブドメインも収集し触ってしまう プログラムページを再確認、リストをフィルタ
DNS ブルートで大量リクエスト → DoS 判定 -rate 100 など低速モード、分散時間実行
検索エンジンキャッシュ経由 URL を不用意に叩く robots.txt に載っていても内部利用の可能性 → レート制御+最小限確認

6. 作業テンプレ(まとめ)

# 1. パッシブ+DNS×OSINTで all_subs.txt 生成
# 2. Live 判定 + ポート確認
httprobe -p https:443,80 < all_subs.txt > live_https.txt

# 3. robots.txt 収集
cat live_https.txt | while read url; do
  curl -s "$url/robots.txt" | \
  grep -Ei 'Disallow|Sitemap' | \
  sed "s|^|$url |"
done > robots_urls.txt

# 4. juicy_paths.txt に整理後、手動/Burp Repeater で検証

まとめ:「サブドメイン×robots.txt」=鉄板コンボ

  • 列挙 → 絞り込み → robots.txt で“裏口”探し
  • 自動化+手動チェックを組み合わせると 短時間で深掘り できる
  • 重複報告が増えた現在でも、ロジックの工夫次第で十分当たる

“基本テク+ひと手間” が、他のハンターと差を付ける秘訣です。

Best regards, (^^ゞ