
セキュリティツール(crossfyre、Burp、ZAP、nuclei など)を向けるための、意図的に脆弱性を持たせたアプリ群です。このフォルダにはアプリのソースコードは一切含まれておらず、スケルトン定義と小さなマネージャーのみがあります。各アプリはそれぞれ分離されたコンテナスタックとして実行されるため、互いに衝突することはありません。
ここにあるものはすべて意図的に脆弱です。ローカルテスト専用です。 インターネットや 信頼できないネットワークに公開しないでください。すべてのポートは
127.0.0.1にバインドされます。
docker compose up は 1 つのコンテナ、vuln_apps_manager(コントロールプレーン)を起動します。これ自体が
脆弱性アプリを起動することはありません。apps/<name>/ 配下のスケルトンフォルダ
(app.yml マニフェスト + compose.yml)で定義され、マネージャーがそれぞれの
独立した docker compose プロジェクトとして実行します。127.0.0.1 にバインドされます。データベースや内部層が
ホストにバインドされることは決してありません。各アプリの Web サービスは共有の ネットワークにも参加するため、
コンテナ内で実行されているスキャナはホストポートを一切使わずに
サービス名(例: )で到達できます。vuln-nethttp://dvwacd vuln_apps
./vam start --all # ONE command: builds the manager, starts every light app,
# and runs each app's first-time setup automatically
./vam status # what's running + URLs
./vam stop --all # stop everything
たった 1 つの ./vam start --all で、各アプリに必要な初回セットアップ(DVWA のデータベース作成、bWAPP のインストール、VAmPI のシード)も実行されるため、running と表示された時点で、手動で /setup.php や /install.php を開くことなく、すべてのアプリが利用可能になります。
マネージャーをライブステータスモニターとして起動したままにしたい場合は、先に docker compose up -d を実行し、その後上記のように ./vam ... を使用します。
./vam <cmd> は単なるラッパーです。それなしでもまったく同じことができます:
docker compose run --rm vuln_apps_manager start --all
docker compose run --rm vuln_apps_manager status
| コマンド | 説明 |
|---|---|
./vam list | すべてのアプリとその状態、URL を一覧表示 |
./vam start <app...> | --all [--heavy] | アプリを起動。--all は --heavy を指定しない限り重量級アプリをスキップ |
./vam stop <app...> | --all | アプリを停止 |
./vam restart <app...> | --all | アプリを再起動 |
./vam status | アプリ群のステータステーブル |
./vam logs <app> [-f] | アプリのログを追跡表示 |
./vam pull <app...> | --all | イメージを事前プル |
./vam ports | ホストポートのマップと衝突チェック |
./vam doctor | 環境とポートの健全性チェック |
例: ./vam start juice-shop dvwa, ./vam start crapi --heavy, ./vam logs webgoat -f。
すべての URL は http://127.0.0.1:<port>(ループバックのみ)です。
| アプリ | ポート | スタック | 備考 |
|---|---|---|---|
| juice-shop | 7001 | Node / Angular | モダンな SPA + REST |
| dvwa | 7002 | PHP / MariaDB | 起動時に DB を自動作成、ログインは admin/password |
| webgoat | 7003 | Java | WebWolf は 7004(OOB キャッチャー) |
| vampi | 7005 | Python / Flask | OWASP API Top 10 |
| dvga | 7006 | Python / GraphQL | /graphql |
| bwapp | 7007 | PHP | 起動時に自動インストール、ログインは bee/bug |
| log4shell | 7009 | Java / Spring | blind-RCE -> OAST |
| crapi | 7010 | Node/Java/Python | 重量級、mailhog は 7011 |
| faultline | 8088 | SvelteKit/Rust/PG/Redis | GitHub から取得(下記参照) |
予約済みホストポート範囲: 7001-7099。./vam ports はライブマップを表示し、衝突があれば警告します。
apps/ の下にフォルダを置きます:
apps/<name>/
app.yml # name, description, category, stack, url
compose.yml # the container(s): image, ports (127.0.0.1 only), any DB
setup.sh # optional: one-time init run after start (see below)
アプリ群をクリーンに保つルール:
127.0.0.1:<空いている 70xx ポート> にバインドします。[vuln-net] のみに配置します。プロジェクトごとのネットワークを追加しないでください。Docker のアドレスプールを節約できます(ネットワークが多すぎると
Docker が "all predefined address pools have been fully subnetted"
というエラーで失敗します)。[default, vuln-net] に、DB は [default] のみ(プライベート、ホストバインドなし)に配置します。各アプリに独自の DB サービスと
ボリュームを与えます(共有しないでください)。vuln-net は
external: true として宣言します。apps/<name>/setup.sh を追加します。マネージャーは start の後に、
マネージャーコンテナ(vuln-net 上にあり、curl を搭載)の内部からそれを実行するため、
curl http://<service>/install.php のようにサービス名で
アプリに到達できます。これだけです。マネージャーが自動的に認識します(./vam list)。
ソースが git リポジトリ(faultline など)にあるアプリの場合は、compose.yml を置く代わりに、app.yml に repo:(クローン URL)と compose:(そのリポジトリ内の compose パス)を記述します。マネージャーは初回起動時に apps/<name>/src/(gitignore 対象)へクローンするため、ソースはここにベンダリングされません。
vulns/ にはアプリごとの「解答キー」(各ターゲットがどのような脆弱性を持つべきかの定義)が格納されており、スキャナの検出結果を正解データと照合できます。vulns/README.md を参照してください。詳細なローカルカタログは faultline と crapi にあります。上流のアプリは、それぞれの公式の解答キーを参照しています。
crAPI は Postgres + Mongo + 3 つのアプリ層(約 2 GB)を実行するため、--all ではスキップされます。明示的に ./vam start crapi --heavy で起動してください。初回起動は遅いです。サインアップ OTP とリセットメールは http://127.0.0.1:7011 の mailhog に届きます。
faultline は Clickswave 独自のフルスタックターゲットです。そのソースはここにはベンダリングされておらず、マネージャーが初回起動時に github.com/clickswave/faultline からクローンします:
./vam start faultline # clones the repo into apps/faultline/src/, then builds + runs it
初回起動でビルドが行われます(Rust のため遅い)。後で ./vam pull faultline でチェックアウトを更新できます。その後、http://127.0.0.1:8088 を開いてください。デモログイン: [email protected] / password、[email protected] / admin。
docker compose down はマネージャーのみを停止します。アプリは先に ./vam stop --all で停止してください(アプリは別々のプロジェクトです)。