コンテンツにスキップ

06. 偵察 — nmap を中心に 🔍

🔊 音声で聴く

攻撃の前に、まず相手を知る。闇雲に撃たず、偵察してから狙いを定めるのが基本です。

ネットワークをスキャンして「どこに何があるか」を探る偵察


偵察は nmap だけではない

偵察には大きく3種類あり、nmap はその一部(アクティブ偵察)です。

flowchart TD
    R["偵察"] --> P["パッシブ偵察<br>相手に触れず情報を集める<br>OSINT(WHOIS/DNS/GitHub/SNS)"]
    R --> A["アクティブ偵察<br>相手に実際に触れる<br>nmap・バナー取得"]
    R --> S["人・物理<br>ソーシャルエンジニアリング<br>フィッシング・物理偵察"]
    style R fill:#2d333b,stroke:#3fb950,stroke-width:2px,color:#e6edf3
    style P fill:#2d333b,stroke:#3fb950,stroke-width:2px,color:#e6edf3
    style A fill:#2d333b,stroke:#f85149,stroke-width:2px,color:#e6edf3
    style S fill:#2d333b,stroke:#bc8cff,stroke-width:2px,color:#e6edf3

実際の侵入は「OSINT で社員のメール形式を調べ、フィッシングで認証情報を抜く」といった人を狙う偵察が起点になることも多い。このノートでは手を動かす **nmap(アクティブ偵察)**を扱いますが、偵察はもっと広いことは意識しておきましょう。


nmap の実践 — 3ステップ

偵察で「このポートで、このソフトが動いている」まで分かれば十分です。

STEP 1:どのポートが開いているか

nmap -p 8088 localhost
PORT     STATE SERVICE
8088/tcp open  http

open = 扉が開いている。ここに何かが動いています。

STEP 2:何が動いているか(バージョン)

nmap -sV -p 8088 localhost
PORT     STATE SERVICE VERSION
8088/tcp open  http    Jetty 9.2.11.v20150529

Jetty 9.2.11 と判明。バージョンが分かると「既知の脆弱性はないか」を調べられます。

STEP 3:中身を詳しく(NSE スクリプト)

nmap -p 8088 --script http-title,http-headers localhost
|_http-title: Struts2 Showcase - Fileupload sample
|   Set-Cookie: JSESSIONID=...;Path=/
|   Server: Jetty(9.2.11.v20150529)

ここで決定的な手がかりが出ます。

手がかり わかること
http-title: Struts2 Showcase Struts2 かも(自己申告なので弱い)
Set-Cookie: JSESSIONID Java 製(強い証拠)
URL が .action で終わる Struts2 特有(強い証拠)

💡 タイトルだけを信じない。 自己申告は嘘もありえます。JSESSIONID(Java)や .action(Struts2 特有)のような客観的な手がかりを重ねて判断します。これが「結果を読む」技術です。


偵察から攻撃へ

Jetty で動く Struts2 アプリ(URL: /showcase.action)
   ↓ だから
「Struts2 の既知脆弱性(S2-045)が刺さるか試そう」
   ↓
→ Metasploit へ

ただし、この時点ではまだ推測です。「本当に脆弱か」は Metasploit の check で確証に変えます(次章)。


技術スタックは複数ツールで調べる

「相手が何で作られ、どのバージョンか」を知るのは、nmap だけでなく手軽なツールも使います。

ツール 調べ方
nmap -sV ポート越しにサービス・バージョン(網羅的)
whatweb http://... URL を叩いて技術を一発判定
Wappalyzer ブラウザ拡張。サイトを開くだけ(一番手軽)
curl -I http://... 応答ヘッダ(Server: や Set-Cookie:)を見る

💡 実務では「軽いツール(whatweb / Wappalyzer / curl)で当たりをつける → nmap で深掘り」の順が効率的です。

curl -sI http://localhost:8088/showcase.action
# Set-Cookie: JSESSIONID=...   ← Java の証拠
# Server: Jetty(9.2.11...)      ← サーバーは Jetty

nmap のスキャンを待たずに、ヘッダを1回見るだけでも多くが分かります。


nmap の全オプション一覧は 付録A. リファレンス にまとめています。 ⚠️ nmap を向けていいのは自分の持ち物と scanme.nmap.org だけ。範囲指定のタイプミスで他人を叩く事故に注意。

次は 07. 侵入(Metasploit) へ。