コンテンツにスキップ

05. 練習用の的(ターゲット)を立てる 🎯

🔊 音声で聴く

攻撃を学ぶには「攻撃していい的」が必要です。 ここではわざと脆弱に作られた練習用アプリを、自分のマシン内に立てます。


このページで立てる的

的 種類 使う脆弱性
Vulhub の Struts2 (S2-045) サーバーの脆弱性 リモートコード実行(このノートの主役)
OWASP Juice Shop Webアプリの脆弱性 SQLi / XSS など(おまけ)

なぜ Struts2 が主役か → Metasploit が一発できれいに刺さる定番の的で、 「偵察 → 攻撃 → 侵入後」の流れを学ぶのに最適だからです。


Vulhub とは

flowchart TB
    V["Vulhub リポジトリ"] --> A["struts2/<br>s2-045, s2-052..."]
    V --> B["log4j/<br>CVE-2021-44228"]
    V --> C["weblogic/ ..."]
    V --> D["(334個の的)"]
    style V fill:#2d333b,stroke:#3fb950,stroke-width:2px,color:#e6edf3

Vulhub は「脆弱性ごとの的」を詰め合わせた有名なリポジトリです。 フォルダごとに docker-compose.yml があり、その1つが「その脆弱性を持った的」の設計図になっています。

# Vulhub を取得(的の設計図集。これ自体は無害な設定ファイル群)
cd ~/web          # 置き場所はどこでもよい
git clone --depth 1 https://github.com/vulhub/vulhub.git

💡 的は使うときだけ起動し、終わったら止めます(docker compose down)。 わざと脆弱なので、動かしっぱなしにしないのが鉄則です。


Struts2 (S2-045) の的を立てる

このノートでは、後で「攻撃役コンテナ」と同じネットワークに置くため、 docker compose ではなく docker run で、ポートを localhost だけに公開して立てます。

# 的を起動(127.0.0.1 = 自分だけがアクセスできる形で公開)
docker run -d --name struts2-s2045 \
  -p 127.0.0.1:8088:8080 \
  vulhub/struts2:2.3.30
オプション 意味
-d バックグラウンドで起動
--name struts2-s2045 コンテナに名前をつける
-p 127.0.0.1:8088:8080 自分(127.0.0.1)だけが 8088 番でアクセスできる。外部には出さない

🔒 安全ポイント:-p 8088:8080 と書くと全ネットワークに公開されてしまいます。 必ず 127.0.0.1: を頭につけて、自分だけがアクセスできるようにします。


起動を確認する

脆弱な的は Java(Tomcat/Jetty)なので、起動に少し時間がかかります。

# 応答が返るまで待つ(HTTP 200 が返れば起動完了)
curl -s -o /dev/null -w "HTTP %{http_code}\n" \
  http://localhost:8088/showcase.action
HTTP 200      ← これが出れば的は準備OK

ブラウザで http://localhost:8088/showcase.action を開くと、 「Struts2 Showcase」というサンプルアプリが見えます。 見た目はただのサンプルですが、これが攻撃対象です。


(おまけ)Juice Shop を立てる

Webアプリの脆弱性(SQLi/XSS)を手で触りたいとき用。

docker run -d --name juice-shop \
  -p 127.0.0.1:3000:3000 \
  bkimminich/juice-shop:latest

ブラウザで http://localhost:3000 を開くと、普通のジュース通販サイトに見えますが、 至る所に練習用の脆弱性が仕込まれています。


的を止める・消す

# 止める(また使うとき)
docker stop struts2-s2045

# 完全に消す(練習終わり)
docker rm -f struts2-s2045

次は 06. 偵察(nmap) へ。