mcpField
V
visual-recon

visual-recon

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

visual-recon について

visual-recon は、gowitness などを使って稼働中ホストを一括撮影し、セキュリティ調査で視覚的に選別するスキルです。スクリーンショットと技術指紋を組み合わせ、多数のサブドメインからログイン画面、初期設定ページ、設定不備のあるサービスを見つけます。

主な機能

  1. 01稼働中ホストのページを一括撮影
  2. 02JavaScript 描画サイトでヘッドレスモードを使用
  3. 03タイトルや視覚的特徴による対象の絞り込み
  4. 04サブドメイン間のページ類似度の比較
  5. 05関連ツールによる技術スタックの特定

活用シーン

  1. 01多数の稼働中サブドメインの迅速な選別
  2. 02初期 CMS 設定ページや管理画面の発見
  3. 03環境間の比較による共有基盤の調査
  4. 04開発環境やエラーページの優先確認

インストール

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

$npx skills add https://github.com/uphiago/recon-skills --skill visual-recon

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

詳細

ビジュアル偵察

稼働中のすべてのホストを自動でスクリーンショットに撮影し、サブドメインを1つずつ手動で開く代わりに、数百件を視覚的にトリアージします。技術フィンガープリンティングと組み合わせることで、技術スタック、CMS のデフォルトインストールページ、管理パネル、設定ミスのあるサービスを一目で把握できます。500以上のホストを数分で処理し、視覚的な調査によって価値の高いターゲットを特定します。

使用する場面

  • 稼働中のサブドメインが100件以上あり、ターゲットを迅速に優先順位付けする必要がある場合。
  • 手動での閲覧では、大量の偵察に時間がかかりすぎる場合。
  • デフォルトのインストールページ(WordPress のセットアップ、phpMyAdmin のログイン、Jenkins のダッシュボードなど)を特定する必要がある場合。
  • サブドメイン間の視覚的なフィンガープリントを比較したい場合(共有インフラストラクチャ)。
  • User-Agent やジオロケーションに応じて、ターゲットが異なるコンテンツを配信する場合。

前提条件

  • terminal の gowitness、httpx、curl。
  • gowitness がインストールされていること:go install github.com/sensepost/gowitness@latest。
  • subdomain-enumeration で取得した、稼働中のサブドメインのリスト。

クイックスタート

gowitness file -f alive_subs.txt -P ./screenshots/ --no-http

手順

フェーズ 1 — 一括スクリーンショットの撮影
# gowitness — fast, Go-based screenshot tool
gowitness file -f alive_subs.txt \
  -P ./screenshots/ \
  --no-http \
  --timeout 15 \
  --resolution-x 1440 \
  --resolution-y 900

# With database for searchable results
gowitness file -f alive_subs.txt -P ./screenshots/ --no-http \
  --db gowitness.db --chrome-window-x 1440 --chrome-window-y 900

# Query results
gowitness report list --db gowitness.db
gowitness report generate --db gowitness.db

# eyewitness — with HTML report generation
python3 EyeWitness.py \
  -f alive_subs.txt \
  --web \
  -d ./eyewitness_output/ \
  --timeout 15 \
  --no-prompt
フェーズ 2 — JavaScript で描画されるサイト向けのヘッドレスモード
# Single-page applications need JS execution
gowitness single -u https://[SPA_COMPANY] \
  -P ./screenshots/ \
  --chrome-window-x 1440 --chrome-window-y 900

# Batch headless capture
cat spa_urls.txt | while read url; do
  gowitness single -u "$url" -P ./screenshots/
done
フェーズ 3 — 視覚的な分析パターン

価値の高いパターンがないか、スクリーンショットを確認します。

# Extract all titles from screenshots for quick filtering
gowitness report list --db gowitness.db \
  | grep -iE "login|admin|dashboard|setup|install|phpmyadmin|jenkins|grafana|api|dev|staging|test"

# Look for default error pages (identifies specific web servers)
gowitness report list --db gowitness.db \
  | grep -iE "404|403|502|503|default|maintenance|under construction"

確認するポイント:

スクリーンショットに表示されるもの意味
WordPress のインストールページ新規の WordPress — /wp-admin/install.php で登録を試す
phpMyAdmin のログインデータベースアクセスパネル — デフォルトの認証情報を試す
Jenkins のログインCI/CD サーバー — 認証なしでアクセスできないか確認する
Grafana/Prometheus監視ダッシュボード — 公開データがないか確認する
IIS のデフォルトページWindows サーバー — ASP.NET エンドポイントを確認する
Apache のデフォルトページ標準的な Linux サーバー — server-status を確認する
エラースタックトレースデバッグモードが有効 — サーバーパスとバージョンを取得する
ディレクトリ一覧閲覧可能なファイルツリー — 設定ファイルを確認する
カスタムポートのログインフォーム内部管理パネル — 最優先ターゲット
フェーズ 4 — 視覚的な差分比較(複数環境)
# Compare screenshots across subdomains to find shared infrastructure
# Same visual = shared server = if one is vulnerable, all are

ls screenshots/ | cut -d'-' -f1 | sort | uniq -c | sort -rn
# High count of identical-looking sites = mass vulnerability potential
フェーズ 5 — スクリーンショットからの技術フィンガープリンティング
# whatweb — identifies CMS, frameworks, servers
whatweb -i alive_subs.txt -a 3 -t 50 --log-brief=cms_results.txt

# wappalyzer CLI — detailed tech stack
wappalyzer https://target.com

# httpx with tech detection built-in
cat alive_subs.txt | httpx -silent -tech-detect -o tech_detected.txt

# Extract unique technologies
cat tech_detected.txt | awk -F'[' '{print $2}' | tr -d ']' | tr ',' '\n' \
  | sort | uniq -c | sort -rn
フェーズ 6 — スクリーンショットベースのトリアージパイプライン
# Full pipeline: subdomains → alive → screenshot → filter → prioritize
cat all_subs.txt \
  | httpx -silent -mc 200 -o alive_200.txt

gowitness file -f alive_200.txt -P ./screenshots/ --no-http

# Generate report for manual review
gowitness report generate --db gowitness.db -o ./report/

# Extract login/admin pages for priority testing
gowitness report list --db gowitness.db \
  | grep -iE "login|admin|sign.?in|dashboard|panel|manage" \
  > priority_targets.txt

注意点

  • 大量のスクリーンショットはディスクを圧迫する可能性があります。 1440x900 のスクリーンショット500枚で約300MBです。
  • JavaScript を多用する SPA は、何も表示されないことがあります。 タイムアウトを長くしてヘッドレスモードを使用してください。
  • リダイレクトチェーンでは、リダイレクト先のスクリーンショットが撮影されます。 これは正常です。最終的な遷移先を確認するためです。
  • CAPTCHA ページはスクリーンショットを無駄にします。 撮影前に CAPTCHA があるホストを除外してください。
  • 応答の遅いサーバーではタイムアウトすることがあります。 通常は --timeout 15 で十分です。接続が遅い場合は値を増やしてください。

検証

  1. alive_subs.txt に記載されたすべてのホストのスクリーンショットが存在すること。
  2. 各スクリーンショットに意味のあるコンテンツが表示されていること(空白でもエラーでもないこと)を、目視で確認すること。
  3. 技術検出の結果が視覚的なフィンガープリントと一致していること(WordPress のファビコンは WordPress CMS を示す)。
  4. 優先ターゲット(ログインパネル、管理ダッシュボード、開発環境)が特定され、次のフェーズに進められていること。

関連スキル

  • subdomain-enumeration — 稼働中のサブドメインのリストを作成します。
  • web-enumeration — スクリーンショットで見つかった個々のホストを詳しく調査します。
  • cms-detection — 発見したホストの CMS とフレームワークを自動検出します。

コメント