visual-recon について
visual-recon は、gowitness などを使って稼働中ホストを一括撮影し、セキュリティ調査で視覚的に選別するスキルです。スクリーンショットと技術指紋を組み合わせ、多数のサブドメインからログイン画面、初期設定ページ、設定不備のあるサービスを見つけます。
主な機能
- 01稼働中ホストのページを一括撮影
- 02JavaScript 描画サイトでヘッドレスモードを使用
- 03タイトルや視覚的特徴による対象の絞り込み
- 04サブドメイン間のページ類似度の比較
- 05関連ツールによる技術スタックの特定
活用シーン
- 01多数の稼働中サブドメインの迅速な選別
- 02初期 CMS 設定ページや管理画面の発見
- 03環境間の比較による共有基盤の調査
- 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で十分です。接続が遅い場合は値を増やしてください。
検証
alive_subs.txtに記載されたすべてのホストのスクリーンショットが存在すること。- 各スクリーンショットに意味のあるコンテンツが表示されていること(空白でもエラーでもないこと)を、目視で確認すること。
- 技術検出の結果が視覚的なフィンガープリントと一致していること(WordPress のファビコンは WordPress CMS を示す)。
- 優先ターゲット(ログインパネル、管理ダッシュボード、開発環境)が特定され、次のフェーズに進められていること。
関連スキル
subdomain-enumeration— 稼働中のサブドメインのリストを作成します。web-enumeration— スクリーンショットで見つかった個々のホストを詳しく調査します。cms-detection— 発見したホストの CMS とフレームワークを自動検出します。
コメント
Markdown 対応