コンテンツにスキップ

外部公開サービス

外部からの初期調査は、ポート番号を眺めるためではなく、次の分岐を決めるために行う。ここでの対象は、公開ポート、名前ベースのルーティング、Web の入力面である。

証拠の分け方はLinux の概要のラベルに従う。シェルを得たあとの内部サービスはネットワークと IPCで調べる。

全ポートと名前ベースルーティング

Section titled “全ポートと名前ベースルーティング”

追加確認例:

ターミナルウィンドウ
nmap -sS -A -p- --min-rate 10000 <TARGET_IP>
curl -i http://<HOSTNAME>/
ffuf -u http://<HOSTNAME>/ -H "Host: FUZZ.<DOMAIN>" -w <WORDLIST> -ac
  • 目的: 外部公開サービス、HTTP のリダイレクト、仮想ホスト、SSH の有無を確認する。
  • 前提条件: HTB など許可された対象であること。-p- は負荷があるためラボ外では使わない。
  • 何を確認しているか: 22/tcp、80/tcp、443/tcp に加え、8080、8888、9100、3000 などの非標準ポート、HTTP のページタイトル、Server ヘッダー、リダイレクト先。
  • 期待される出力: Did not follow redirect to http://name.htb/、HTTP 401/403、仮想ホストによってステータスや応答サイズが変わる結果。
  • 出力の解釈: リダイレクト先の名前は /etc/hosts に追加して確認する候補になる。仮想ホストは同じ IP 上の別アプリを示す。外部で filtered だったポートは、侵入後にローカルから再確認する。
  • 失敗した場合の切り分け: DNS と hosts、VPN の IP、HTTP と HTTPS、Host ヘッダー、-ac の誤補正、共通レスポンスによるフィルタを確認する。
  • 代替コマンド: rustscan, masscan, curl -H 'Host: ...', feroxbuster --dont-filter。
  • 状態変更: 原則なし。大量のスキャンやファジングはログと負荷を生む。

リダイレクト先や Host ヘッダーによって応答のステータスやサイズが変わる場合は、名前に応じて別のサイトへ振り分けられている可能性がある。リダイレクト先の名前を /etc/hosts に追加し、その名前で調査し直す。

NFS などの公開共有やメールは、別のホスト名、アカウント、アプリの場所を示す手掛かりになる。共有内の URL とアカウント名を、Web の入力面と合わせて記録する。共有上のファイルを変更した場合は、その内容も記録する。

追加確認例:

ターミナルウィンドウ
feroxbuster -u http://<HOSTNAME>/ -w <WORDLIST> -d 1
curl -i http://<HOSTNAME>/<PATH>
grep -RniE 'fetch|ajax|nonce|upload|api|token|encrypt|decrypt|action' <DOWNLOADED_JS_DIR>
  • 目的: 認証、アップロード、管理 UI、API、フロントエンドに露出した設定を見つける。
  • 前提条件: 取得したファイルの保存先と、対象側のパスを混同しない。
  • 何を確認しているか: nonce、暗号鍵、API の操作、ファイルアップロード、管理者 bot、機械学習モデルの登録機能、アーカイブ処理。
  • 期待される出力: JS 内の admin-ajax.php、nonce、ENCRYPTION_KEY、/predict、/upload_*、/api/...。
  • 出力の解釈: フロントエンドに含まれる値は秘密情報として扱えない。保存型 XSS やモデルの読み込みなど、別の権限で動く処理につながるかを調べる。
  • 失敗した場合の切り分け: SPA のバンドル、ソースマップ、仮想ホストの違い、Cookie の有無、HTTP と HTTPS の違いを確認する。
  • 代替コマンド: httpx, katana, subjs、browser devtools。
  • 状態変更: GET 中心なら原則なし。POST やアップロードの検証で作成したものは、後片付けの対象として記録する。

入力がどのプロセスに渡るかは、独自コードの信頼境界でデータフローとして書く。