mcpField
H
hunt-information-disclosure

hunt-information-disclosure

github.com/uphiagoセキュリティ1.3k41 回インストール8 週間前に更新
リポジトリ

hunt-information-disclosure について

エラー、ソースマップ、公開ファイル、デバッグ用エンドポイント、応答差分から情報漏えいを探すセキュリティスキルです。テスターが漏えいを検証し、後続の脆弱性調査にどう役立つかを評価できます。

主な機能

  1. 01エラー内の内部情報を確認
  2. 02公開ソースマップやファイルを発見
  3. 03応答差分による列挙をテスト
  4. 04バージョンと技術スタックを特定
  5. 05漏えいの検証と連鎖を支援

活用シーン

  1. 01詳細なアプリケーションエラーの調査
  2. 02本番アセット内のソースマップ確認
  3. 03APIでのユーザーやオブジェクト列挙のテスト
  4. 04漏えいしたバージョンの脆弱性調査への有用性評価

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/uphiago/recon-skills --skill hunt-information-disclosure

インストール後、Claude Code で/hunt-information-disclosureを入力して読み込まれたか確認します。

詳細

情報漏えいの調査

スタックトレース、デバッグエンドポイント、バージョン付きパスの探索、ソースマップ、差分オラクルを通じた情報漏えいを調査します。情報漏えいは他の脆弱性の影響を増幅します。バージョン番号があれば CVE を標的にでき、サーバーパスがあれば LFI が可能になり、スキーマが漏えいすれば認証を回避でき、エラーメッセージから内部インフラが明らかになります。

使用する場面

  • アプリケーションが、スタックトレース、ファイルパス、SQL の断片を含む詳細なエラーメッセージを返す場合。
  • ソースマップ(.js.map)が本番環境にデプロイされている場合。
  • バージョン付きの静的アセットから、フレームワークや CMS のバージョンが分かる場合。
  • API レスポンスがオブジェクトの存在によって異なる場合(ステータス、長さ、時間によるユーザー列挙)。
  • デバッグエンドポイント、ヘルスチェック、ステータスページから内部状態が漏えいしている場合。

簡易検出

# Trigger errors on common paths
for path in "/nonexistent" "/%00" "/.." "/error" "/debug"; do
  curl --max-time 30 --connect-timeout 10 -sk "https://target.com$path" | grep -iE "stack|trace|exception|error|warning|debug|line [0-9]+" | head -5
done

手順

フェーズ 1 — エラーと例外からの漏えい
# Trigger errors with malformed input
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/api/users?id='"
curl --max-time 30 --connect-timeout 10 -sk -X POST "https://target.com/api/login" -d '{"username":null}'
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/search?q=%00"

# Check response for sensitive data
# Stack traces → file paths, line numbers, framework version
# SQL errors → table names, column names, DB type
# Deserialization errors → class names, serialization format
# Template errors → template paths, engine type

# Fuzz for debug endpoints
for path in "/debug" "/__debug__" "/debugbar" "/_debug_toolbar" "/.well-known/debug" \
            "/actuator" "/actuator/info" "/actuator/env" "/actuator/health"; do
  curl --max-time 30 --connect-timeout 10 -sk "https://target.com$path" -w "\n%{http_code} — $path\n" -o /dev/null
done
フェーズ 2 — DVCS と設定ファイルの探索
# Git, SVN, Mercurial exposure
for path in "/.git/HEAD" "/.git/config" "/.svn/entries" "/.hg/store/"; do
  curl --max-time 30 --connect-timeout 10 -sk "https://target.com$path" -w "%{http_code} — $path\n" -o /dev/null
done

# Config and env files
for pattern in ".env" ".env.local" ".env.production" ".env.staging" \
               "config.json" "config.yml" "settings.py" "settings.php" \
               "wp-config.php" "web.config" "app.config"; do
  curl --max-time 30 --connect-timeout 10 -sk "https://target.com/$pattern" -w "%{http_code} — $pattern\n" -o /dev/null
done

# Backup files
for pattern in "backup.zip" "backup.sql" "dump.sql" "db.sql" \
               "database.sql" "export.sql" "site.tar.gz" "backup.tar.gz"; do
  curl --max-time 30 --connect-timeout 10 -sk "https://target.com/$pattern" -w "%{http_code} — $pattern\n" -o /dev/null
done
フェーズ 3 — ソースマップの悪用
# Find .js.map files
curl --max-time 30 --connect-timeout 10 -sk "https://target.com" | grep -Eo '[^"\s]+\.js\.map' | sort -u

# Download and extract
wget "https://target.com/static/app.js.map"
node -e "
const m=require('./app.js.map');
m.sources.forEach((s,i)=>require('fs').writeFileSync(s.split('/').pop(),m.sourcesContent[i]));
console.log('Extracted '+m.sources.length+' files');
"

# Look for NEXT_PUBLIC env vars in extracted source
grep -r "NEXT_PUBLIC_" extracted_files/ | cut -d= -f1 | sort -u
フェーズ 4 — 差分オラクル
# User enumeration via status code
for id in {1..50}; do
  curl --max-time 30 --connect-timeout 10 -sk "https://target.com/api/users/$id" -w "$id — %{http_code}\n" -o /dev/null
done

# Object existence via response size
for id in {1..100}; do
  size=$(curl --max-time 30 --connect-timeout 10 -sk "https://target.com/api/orders/$id" -w "%{size_download}" -o /dev/null)
  echo "$id — $size bytes"
done | awk '$2 > 100 {print "EXISTS: "$0}'

# Timing oracle for blind enumeration
for id in {1..50}; do
  time curl --max-time 30 --connect-timeout 10 -sk "https://target.com/api/users/$id" -o /dev/null -w "%{time_total}s $id\n"
done | sort -rn

# ETag/304 oracle
for id in {1..10}; do
  etag=$(curl --max-time 30 --connect-timeout 10 -skI "https://target.com/api/users/$id" | grep -i etag)
  echo "$id: $etag"
done
フェーズ 5 — バージョンとテクノロジーの特定
# Framework version from static assets
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/static/admin/css/base.css" | head -5
curl --max-time 30 --connect-timeout 10 -sk "https://target.com" | grep -Eo '(?:Django|Laravel|Rails|Express|Next\.js|Nuxt)[\s/]*v?[0-9.]+'

# Package manager lock files
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/composer.lock" | jq -r '.packages[] | select(.version) | "\(.name)@\(.version)"' 2>/dev/null
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/package-lock.json" | jq -r '.packages | to_entries[] | "\(.key)@\(.value.version)"' 2>/dev/null
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/yarn.lock" | head -30
フェーズ 6 — 漏えいの連鎖

それぞれの漏えいは、他の攻撃ベクトルに利用できる情報を提供します。

漏えい情報連鎖先
フレームワークのバージョンCVE データベースでの検索
サーバーパスLFI のパストラバーサル
内部 IPSSRF の標的
API スキーマ非公開エンドポイントを利用した認証回避
依存関係のバージョンサプライチェーンの脆弱性
NEXT_PUBLIC 変数API キー/Supabase/Firebase へのアクセス
SQL エラーSQL インジェクションの確認と DB の種類の特定

注意点

  • すべてのエラーメッセージが悪用可能とは限りません。 詳細のない一般的な「エラーが発生しました」というページは、脆弱性の報告対象ではありません。
  • ソースマップが空、または削除されている場合があります。 報告する前に、抽出した内容を確認してください。
  • 差分オラクルの結果は統計的なものです。 報告する前に、少なくとも 3 回サンプルを取得して確認してください。
  • .git の露出は、単にパスに対して HTTP 200 が返るだけでは不十分です。 キャッチオール型の SPA では、Git データを返さずに /.git/HEAD に 200 を返す場合があります。
  • バージョンの漏えいのみでは、通常、重大度は LOW です。 バージョン → CVE → 悪用、のように連鎖させてください。

検証

  1. エラーメッセージに、利用価値のある内部情報(ファイルパス、SQL クエリ、フレームワークのバージョン)が含まれていること。
  2. ソースマップの抽出によって、識別可能なコードを含む実際のソースファイルが得られること(webpack のブートストラップだけではないこと)。
  3. 差分オラクルによって、存在するリソースと存在しないリソースを一貫して区別できること。
  4. 報告する前に、漏えいを別の脆弱性につなげること。単独の情報漏えいが重大な問題になることはほとんどありません。
  5. 設定ファイルについては、漏えいしたデータに認証情報、API キー、接続文字列が含まれていること(一般的な設定情報だけではないこと)。

関連スキル

  • source-leak-hunt — .env、.git、設定ファイルの漏えいに特化しています。
  • js-secrets-extraction — JavaScript バンドル内の API キーとトークン。
  • error-log-mining — 認証情報やクエリが漏えいする PHP エラーログ。
  • web-enumeration — 機密性の高いエンドポイントを明らかにするパス探索。

コメント