1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🧠 Dockerで学ぶ脆弱性演習環境の構築と調査手法入門(Kali × DVWA × Juice Shop)

Posted at

🧩 目的:安全な環境で脆弱性を理解するための実験

本記事は、ローカルDocker環境上で完結するサイバーセキュリティ学習環境を構築し、
各種スキャン・調査ツールを使って「脆弱性の原理」を体験的に学ぶ手順をまとめたものです。

実際の攻撃を行うものではなく、防御・教育目的の演習として記載しています。


⚠️ 倫理的・法的な注意事項

  • 本記事で紹介する内容は すべてローカル(Docker内)で実施 したものです。
  • 公開サーバー・他者ネットワーク・実サービスに対するスキャン・侵入は
    日本の不正アクセス禁止法により明確に違法です。
  • 知識の習得目的であっても、検証環境外での実行は絶対に行わないでください
  • 本記事は「セキュリティを守る側の視点を理解する」ための教育資料です。

🧩 環境構成概要

役割 コンテナ名 イメージ 用途
攻撃端末 kali kalilinux/kali-rolling セキュリティツールの実行
脆弱アプリ1 target-dvwa vulnerables/web-dvwa PHP製脆弱Webアプリ
脆弱アプリ2 target-juice bkimminich/juice-shop OWASP公式学習アプリ
DB dvwa-db mariadb DVWA用MySQL互換DB

🧱 Docker Compose 設定例

version: '3'
services:
  kali:
    image: kalilinux/kali-rolling
    container_name: kali
    tty: true

  target-dvwa:
    image: vulnerables/web-dvwa
    container_name: target-dvwa
    ports:
      - "80:80"

  target-juice:
    image: bkimminich/juice-shop
    container_name: target-juice
    ports:
      - "3000:3000"

  dvwa-db:
    image: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: root

🚀 起動コマンド

mkdir ~/ceh-lab-docker
cd ~/ceh-lab-docker
docker compose -f lab-docker-compose.yml up -d
docker ps

起動後、以下のように各コンテナが Up 状態になれば成功です。

CONTAINER ID   IMAGE                    COMMAND                   PORTS
5d08798bd12a   vulnerables/web-dvwa     "/main.sh"                0.0.0.0:80->80/tcp
50d4d50d18f3   bkimminich/juice-shop    "/nodejs/bin/node /j…"   0.0.0.0:3000->3000/tcp
120df0359ebb   kalilinux/kali-rolling   "/bin/bash -lc 'whil…"   ...

🔧 Kali側セットアップ

docker exec -it kali bash
apt update && apt install -y iputils-ping nmap curl nikto gobuster seclists jq unzip

🔍 スキャン・調査手法

1️⃣ Nmapによるポートスキャン

nmap -sS -Pn -T4 192.168.123.111
nmap -sV -sC 192.168.123.115
対象 結果
DVWA (192.168.123.111) 80/tcp open (Apache/2.4.25)
Juice Shop (192.168.123.115) 3000/tcp open (Node.js)

2️⃣ Niktoによる脆弱性スキャン

nikto -h http://192.168.123.111
nikto -h http://192.168.123.115:3000

検出例:

  • DVWA

    • /config/ /docs/ のディレクトリインデックス公開
    • .gitignore, php.ini の露出
    • allow_url_include=On → LFI/RFIリスク
  • Juice Shop

    • /robots.txt/ftp/ 記載
    • /api/Products 等のREST API公開確認

3️⃣ Gobusterでディレクトリ列挙

gobuster dir -u http://192.168.123.111 -w /usr/share/seclists/Discovery/Web-Content/common.txt -t 40

検出結果(抜粋):

/config
/docs
/.gitignore
/php.ini
/.htaccess

4️⃣ Curlでファイル確認

curl -I http://192.168.123.111/
curl -s http://192.168.123.111/.gitignore
curl -s http://192.168.123.111/php.ini | grep allow_

確認結果:

  • .gitignoreconfig/config.inc.php 記載
  • php.iniallow_url_include=on
  • /config/ /docs/ がブラウザで閲覧可能(ディレクトリリスティング)

5️⃣ Juice Shop APIを確認

curl -s http://192.168.123.115:3000/api/Products | jq .

結果:

  • 認証不要で全商品一覧が取得可能
  • REST APIのオープン設計を学べる

🧠 学べるポイント

観点 内容
設定ファイル露出 .gitignore などに機密ファイルパスが含まれる
PHP設定の危険性 allow_url_include がONだとRFI攻撃が可能
ディレクトリインデックス /config/ /docs/ などが閲覧可能に
REST API設計 Juice ShopのAPIが無認証で公開されている例
スキャン出力の読解 Nikto/Gobusterの結果を整理し理解する

📚 使用コマンドまとめ

docker compose up -d
docker exec -it kali bash
apt update && apt install -y nmap nikto gobuster seclists jq
nmap -sS -Pn -T4 192.168.123.111
nikto -h http://192.168.123.111
gobuster dir -u http://192.168.123.111 -w /usr/share/seclists/Discovery/Web-Content/common.txt -t 40
curl -s http://192.168.123.115:3000/api/Products | jq .

🧩 次のステップ

  1. config/config.inc.php の解析
    → DB接続情報の仕組みを確認(攻撃ではなく理解目的)

  2. DVWAの難易度設定変更(Security → Low)
    → SQLi・XSS・CSRFなどの実験を行い、ログを観察

  3. Juice Shop CTFモードで練習
    → OWASP公式教材として安全に脆弱性探索を体験

  4. 防御側視点の実装学習

    • セキュリティヘッダ付与
    • ディレクトリリスティング無効化
    • API認証化・CORS設定の理解

🧾 まとめ

Dockerを使えば、1台のPCで完結する完全隔離型の脆弱性学習環境が構築できます。
Kali + DVWA + Juice Shopを組み合わせることで、
攻撃と防御の両側面からWebセキュリティを体系的に学ぶことが可能です。

💡 学びの本質:
「攻撃手法を知ることは、防御を設計する最初の一歩。」


🏷️ タグ候補

#セキュリティ
#Docker
#KaliLinux
#脆弱性診断
#JuiceShop
#DVWA
#ペネトレーションテスト学習

✍️ 著者コメント

本記事の内容は、教育・研究目的で構築したローカル実験環境に基づくものです。
読者が「脆弱性を悪用する」のではなく、「安全なシステム設計を実現する」ための知識として活用することを願っています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?