
Ejecuta una flota de aplicaciones web/API intencionalmente vulnerables en stacks de Docker aislados para pruebas de penetración locales y validación de hallazgos de escáneres con catálogos de vulnerabilidades de referencia.
Una flota de aplicaciones intencionalmente vulnerables para apuntar herramientas de seguridad (crossfyre, Burp, ZAP, nuclei, etc.). Esta carpeta no contiene el código fuente de las aplicaciones, solo definiciones esqueleto y un pequeño gestor. Cada aplicación se ejecuta como su propia pila de contenedores aislada, por lo que nada entra en conflicto.
Todo lo que hay aquí es deliberadamente vulnerable. Solo para pruebas locales. No expongas esto a internet ni a una red no confiable. Todos los puertos se enlazan a
127.0.0.1.
docker compose up inicia un contenedor: vuln_apps_manager (el plano de control). No inicia ninguna aplicación vulnerable por sí mismo.apps/<name>/ (un manifiesto app.yml + un compose.yml) y el gestor la ejecuta como su propio proyecto independiente.docker compose127.0.0.1. Las bases de datos y las capas internas nunca se enlazan al host. El servicio web de cada aplicación también se une a una red compartida vuln-net, de modo que un escáner que se ejecute en un contenedor puede alcanzarlas por nombre (p. ej. http://dvwa) sin ningún puerto de host.cd 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
Ese único ./vam start --all también ejecuta la configuración única que necesita cada aplicación (la creación de la base de datos de DVWA, la instalación de bWAPP, la carga de datos inicial de VAmPI), de modo que cada aplicación es utilizable en el momento en que informa running, sin clics manuales en /setup.php ni /install.php.
¿Quieres que el gestor permanezca activo como un monitor de estado en vivo? Ejecuta docker compose up -d primero y luego usa ./vam ... como arriba.
./vam <cmd> es solo un envoltorio. Exactamente lo mismo sin él:
docker compose run --rm vuln_apps_manager start --all
docker compose run --rm vuln_apps_manager status
| Comando | Qué hace |
|---|---|
./vam list | lista todas las aplicaciones, su estado y URL |
./vam start <app...> | --all [--heavy] | inicia la(s) aplicación(es). --all omite las aplicaciones pesadas a menos que se use --heavy |
./vam stop <app...> | --all | detiene la(s) aplicación(es) |
./vam restart <app...> | --all | reinicia la(s) aplicación(es) |
./vam status | tabla de estado de la flota |
./vam logs <app> [-f] | muestra el final de los registros de una aplicación |
./vam pull <app...> | --all | descarga previamente las imágenes |
./vam ports | mapa de puertos del host + comprobación de conflictos |
./vam doctor | comprobaciones de coherencia del entorno y los puertos |
Ejemplos: ./vam start juice-shop dvwa, ./vam start crapi --heavy, ./vam logs webgoat -f.
Todas las URL son http://127.0.0.1:<port> (solo loopback).
| Aplicación | Puerto | Stack | Notas |
|---|---|---|---|
| juice-shop | 7001 | Node / Angular | SPA moderna + REST |
| dvwa | 7002 | PHP / MariaDB | base de datos creada automáticamente al iniciar; acceso admin/password |
| webgoat | 7003 | Java | + WebWolf en 7004 (receptor OOB) |
| vampi | 7005 | Python / Flask | OWASP API Top 10 |
| dvga | 7006 | Python / GraphQL | /graphql |
| bwapp | 7007 | PHP | autoinstalada al iniciar; acceso bee/bug |
| log4shell | 7009 | Java / Spring | RCE ciego -> OAST |
| crapi | 7010 | Node/Java/Python | pesada; mailhog en 7011 |
| faultline | 8088 | SvelteKit/Rust/PG/Redis | obtenida de GitHub (ver más abajo) |
Bloque de puertos de host reservado: 7001-7099. ./vam ports muestra el mapa en vivo y marca cualquier conflicto.
Coloca una carpeta en 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)
Reglas para mantener la flota ordenada:
127.0.0.1:<free 70xx port>.[vuln-net]. NO añadas una red por proyecto; eso conserva el pool de direcciones de Docker (con demasiadas redes, Docker falla con "all predefined address pools have been fully subnetted").[default, vuln-net] y la base de datos solo en [default] (privada, sin enlace al host). Dale a cada aplicación su propio servicio de base de datos y su propio volumen (no lo compartas). Declara vuln-net como external: true.apps/<name>/setup.sh. El gestor lo ejecuta después de start, desde dentro del contenedor del gestor (que está en vuln-net y tiene curl), de modo que puede alcanzar la aplicación por nombre de servicio, p. ej. curl http://<service>/install.php.Eso es todo. El gestor lo detecta automáticamente (./vam list).
Para una aplicación cuyo código fuente vive en un repositorio git (como faultline), omite compose.yml y, en su lugar, pon repo: (la URL de clonado) y compose: (la ruta del compose dentro de ese repositorio) en app.yml. El gestor lo clona en apps/<name>/src/ (gitignored) en el primer arranque, por lo que no se incluye ningún código fuente aquí.
vulns/ contiene una "clave de respuestas" por aplicación (a qué debería ser vulnerable cada objetivo), de modo que puedes contrastar los hallazgos de un escáner con la verdad de referencia. Consulta vulns/README.md. Existen catálogos locales detallados para faultline y crapi; las aplicaciones upstream apuntan a sus propias claves de respuestas autorizadas.
crAPI ejecuta Postgres + Mongo + tres capas de aplicación (~2 GB), por lo que --all la omite. Iníciala explícitamente: ./vam start crapi --heavy. El primer arranque es lento; el OTP de registro y los correos de restablecimiento llegan a mailhog en http://127.0.0.1:7011.
faultline es el objetivo full-stack propio de Clickswave. Su código fuente no está incluido aquí; el gestor lo clona desde github.com/clickswave/faultline en el primer arranque:
./vam start faultline # clones the repo into apps/faultline/src/, then builds + runs it
El primer arranque lo compila (Rust; lento). Actualiza el checkout más adelante con ./vam pull faultline. Luego abre http://127.0.0.1:8088. Credenciales de demostración: [email protected] / password, [email protected] / admin.
docker compose down detiene solo el gestor. Detén primero las aplicaciones con ./vam stop --all (son proyectos independientes).