system onlinepath: /guias/hacking/laboratorio-vulnerable-con-dvwa/mode: knowledge_baselocal:
Hacking ético · Nivel inicial

Cómo crear un laboratorio vulnerable con DVWA

DVWA es una aplicación web deliberadamente vulnerable para practicar ataques como inyección SQL y XSS. Cómo instalarla con Docker, configurarla por primera vez, entender sus niveles de seguridad y la regla que no se negocia: nunca exponerla a una red pública.

14 min de lectura▣ Actualizada el ◇ Por Underc0de
Respuesta rápida

DVWA (Damn Vulnerable Web Application) es una aplicación web escrita en PHP con base de datos MySQL o MariaDB, deliberadamente vulnerable, pensada para practicar ataques como inyección SQL y XSS (secuencias de comandos entre sitios) en un entorno controlado. Se instala con Docker Compose, con un paquete para Windows o con un script de terceros para sistemas basados en Debian, y trae cuatro niveles de seguridad —low, medium, high e impossible— que gradúan la dificultad de cada ejercicio. La regla que no se negocia: nunca se expone a una red pública ni a un alojamiento compartido, porque el propio proyecto advierte que será comprometida. Se instala dentro de una máquina virtual con la red en modo NAT, aislada de internet.

Ver índice de contenidos
  1. 01La regla que no se negocia
  2. 02Qué es DVWA
  3. 03Requisitos antes de instalar
  4. 04Cómo instalar DVWA
  5. 05Configuración inicial y primer arranque
  6. 06Niveles de seguridad
  7. 07Credenciales por defecto
  8. 08Errores frecuentes
  9. 09Preguntas frecuentes
  10. 10Fuentes

La regla que no se negocia

Antes de instalar nada, hay una idea que tiene que quedar clara: DVWA es deliberadamente vulnerable. No es un descuido de programación que en algún momento alguien va a corregir: cada falla está puesta ahí a propósito para que la practiques. El propio proyecto lo dice de forma literal en su documentación: no debe subirse jamás a la carpeta pública de un proveedor de alojamiento ni a ningún servidor expuesto a internet, porque será comprometida. No es una posibilidad remota, es cuestión de tiempo.

!
Nunca en una red pública

El proyecto recomienda instalar DVWA dentro de una máquina virtual con la red configurada en modo NAT (traducción de direcciones de red: le da salida a internet para actualizar paquetes, sin exponerla como un servicio accesible desde afuera), y montar dentro de esa misma máquina tanto el servidor web como la base de datos. Nada de subirla a un hosting compartido, ni de abrir el puerto en tu router, ni de dejarla en una red donde otro dispositivo pueda alcanzarla.

DVWA corre dentro de una máquina virtual con la red configurada en modo NAT, sin ninguna ruta hacia la red doméstica ni hacia internet. Dentro de esa máquina conviven el servidor web, PHP y la base de datos MySQL o MariaDB, con la aplicación DVWA como capa superior. Una barrera marcada «sin salida» separa la máquina virtual de internet y de cualquier alojamiento compartido, con la advertencia de que si DVWA se expone ahí será comprometida. Debajo se muestran los cuatro niveles de seguridad de DVWA como una progresión ascendente de dificultad: low, sin protección; medium, con defensas parciales; high, con defensas más sólidas; e impossible, con el código corregido siguiendo buenas prácticas. Se destaca que el valor por defecto del proyecto es impossible, no low, lo que suele confundir a quien recién empieza.
DVWA vive dentro de una máquina virtual sin salida a internet; los cuatro niveles de seguridad —low, medium, high e impossible— gradúan la dificultad de cada ejercicio.

La máquina virtual en red NAT resuelve dos problemas a la vez: aísla la aplicación vulnerable de tu red real, y te deja tomar una instantánea (snapshot) antes de cada ejercicio para volver a un estado limpio. Si ya armaste un laboratorio con Kali Linux, este es el objetivo vulnerable que le faltaba: la guía de fundamentos de hacking ético ya explica por qué el aislamiento no es opcional; acá se aplica esa misma regla al caso concreto de DVWA.

Qué es DVWA

DVWA (Damn Vulnerable Web Application) es una aplicación web construida en PHP y con base de datos MySQL o MariaDB, mantenida por el proyecto de digininja en GitHub. A diferencia de un sistema real, cada una de sus pantallas contiene una falla de seguridad puesta ahí a propósito: inyección SQL, cross-site scripting (XSS), subida insegura de archivos, fuerza bruta de inicio de sesión, y varias más según la sección que abras. Nada de lo que encuentres ahí es un hallazgo real del que avisarle a nadie: es el ejercicio.

La utilidad concreta es tener un objetivo controlado para practicar con herramientas como las que ves en SQLi, XSS y CSRF explicados con su defensa, o con un proxy de intercepción como OWASP ZAP, sin depender de un sitio de terceros ni arriesgarte a que una prueba real termine siendo un delito. También sirve al revés: DVWA muestra el código vulnerable de cada ejercicio, y podés compararlo contra el mismo ejercicio resuelto en el nivel más estricto.

Requisitos antes de instalar

Antes de elegir la vía de instalación conviene tener la pila de software lista. DVWA necesita:

  • PHP 7.3 o superior (versión recomendada por el proyecto; conviene revisar la versión exacta que trae tu distribución en el momento de instalar, porque cambia con el tiempo).
  • MySQL o MariaDB como motor de base de datos, con preferencia por MariaDB.
  • Un servidor web con reescritura de URL habilitada (el módulo equivalente a mod_rewrite en Apache, o su equivalente en otros servidores).
  • Las extensiones de PHP para la base de datos y para procesar imágenes, usadas en el ejercicio de subida de archivos.

Si vas a usar Docker Compose no tenés que instalar nada de esto a mano: la imagen ya trae la pila resuelta. Si optás por Windows con un paquete que integre servidor web, PHP y base de datos, o por instalar los componentes sueltos en Linux, tenés que verificar cada uno de estos puntos antes de copiar los archivos de DVWA.

Cómo instalar DVWA

El proyecto ofrece más de una vía. Ninguna reemplaza la regla del aislamiento: elijas la que elijas, la instalación entera pasa dentro de la máquina virtual aislada.

Docker Compose, la vía que recomienda hoy el proyecto

Docker empaqueta una aplicación con todo lo que necesita para correr en un contenedor aislado; Docker Compose levanta varios contenedores relacionados —acá, la aplicación y la base de datos— con una sola orden. Con Docker y Docker Compose instalados dentro de la máquina virtual, alcanza con:

Bash
git clone https://github.com/digininja/DVWA.git
cd DVWA
docker compose up -d

Esta vía tiene una ventaja adicional: el archivo de composición (docker-compose.yml) permite fijar variables como el nivel de seguridad por defecto antes de levantar el contenedor, en vez de tener que cambiarlo a mano desde la interfaz cada vez.

Paquete para Windows

También podés instalarla en Windows con un paquete que incluya servidor web, PHP y base de datos ya integrados. En ese caso, copiás la carpeta de DVWA dentro del directorio público de ese paquete y seguís el mismo paso de configuración inicial que se describe más abajo.

Script de instalación automatizado (de terceros)

Para sistemas basados en Debian existe además un script que automatiza buena parte de la instalación. Conviene remarcar algo importante: ese script no pertenece al proyecto oficial de DVWA, lo mantiene un tercero. Si lo usás, el propio README de DVWA recomienda revisar su contenido antes de ejecutarlo, sobre todo porque suele correr con privilegios de administrador. Ejecutar a ciegas un script ajeno, como administrador, no es el hábito que querés incorporar mientras aprendés seguridad.

Configuración inicial y primer arranque

Sea cual sea la vía de instalación, la primera puesta en marcha sigue los mismos pasos:

  1. Copiar el archivo de configuración de ejemploDentro de la carpeta de DVWA, copiá config/config.inc.php.dist como config/config.inc.php. Ese archivo define, entre otras cosas, los datos de conexión a la base de datos y el nivel de seguridad por defecto.
  2. Entrar a la aplicación desde el navegadorAbrí la dirección donde quedó publicada dentro de la máquina virtual. Vas a ver la pantalla de inicio de sesión de DVWA.
  3. Ir a «Setup DVWA»Es la sección que verifica que la configuración y las extensiones de PHP necesarias estén en orden.
  4. Pulsar «Create / Reset Database»Este botón crea las tablas que necesita la aplicación y carga los datos iniciales. Es el mismo botón que vas a usar después, cada vez que quieras dejar la base de datos en su estado original.

Con eso, DVWA queda lista para iniciar sesión y empezar a practicar. Si algo en «Setup DVWA» aparece marcado en rojo, casi siempre es una extensión de PHP o un permiso de escritura que falta: revisá los requisitos antes de seguir.

Niveles de seguridad

Cada ejercicio de DVWA se puede resolver con distinto grado de dificultad, según el nivel de seguridad activo. El nivel se define en el archivo de configuración y se puede cambiar desde la propia interfaz, en la sección «DVWA Security»:

Niveles de seguridad de DVWA y qué representa cada uno
NivelQué representa
lowSin ninguna protección. El punto de partida para entender la vulnerabilidad en su forma más simple.
mediumAlgunas defensas parciales, del tipo que se ve en código real escrito sin mucho cuidado.
highDefensas más sólidas, pensadas para forzarte a buscar variantes del ataque.
impossibleCódigo corregido siguiendo buenas prácticas. Sirve como referencia de cómo se soluciona cada falla.
i
El dato que explica el «no me funciona»

El valor por defecto del proyecto no es low, es impossible. Es contraintuitivo, pero así viene configurado de fábrica. Si acabás de instalar DVWA y un ejercicio de inyección SQL o XSS que debería funcionar «no hace nada», antes de sospechar de tu payload o de tu instalación, andá a «DVWA Security» y bajá el nivel a low. Es, con diferencia, la confusión más común de quien recién empieza con esta herramienta.

Conviene recorrer los cuatro niveles del mismo ejercicio en orden, de low a impossible: vas viendo cómo se cierra la falla a medida que el código agrega validaciones, y impossible queda como referencia de una implementación corregida.

Credenciales por defecto

DVWA viene con un usuario ya creado: admin con contraseña password. El propio README lo señala con cierta ironía: son credenciales fáciles de adivinar por fuerza bruta. Ese es, precisamente, el punto: una de las primeras prácticas razonables sobre DVWA es un ataque de fuerza bruta contra su formulario de inicio de sesión.

No cambies esas credenciales pensando que «así queda más segura»: perdés ese ejercicio puntual, y el resto de la aplicación sigue siendo vulnerable de todas formas. La seguridad de DVWA no depende de la contraseña del admin, sino de que la máquina donde corre esté aislada de cualquier red que no controles.

Errores frecuentes

  • Exponerla a una red pública o a un alojamiento compartido. Es el error que el propio proyecto marca como el más grave: la aplicación será comprometida.
  • Dejarla en el nivel impossible sin saberlo. Es el valor por defecto, no low; si un ejercicio «no funciona», revisá el nivel antes que nada.
  • No aislar la máquina virtual. Dejarla en modo puente, en la misma red que tus otros dispositivos, anula el propósito del laboratorio.
  • Confundir un laboratorio vulnerable con un sistema real. Lo que encontrás en DVWA no es un hallazgo para reportar a nadie: es el ejercicio.
  • Ejecutar el script de instalación de terceros sin revisarlo. No es del proyecto oficial y suele pedir privilegios de administrador.

Preguntas frecuentes

¿Qué es DVWA y para quién está pensado?

DVWA (Damn Vulnerable Web Application) es una aplicación web en PHP con base de datos MySQL o MariaDB que reúne, en un mismo sitio, un conjunto de fallas de seguridad puestas ahí a propósito: inyección SQL, XSS, subida insegura de archivos, fuerza bruta de autenticación, entre otras. No es un sistema con errores accidentales que alguien vaya a corregir: cada falla es el ejercicio en sí. Está pensada para practicar en un entorno controlado, ya sea usando herramientas de auditoría como un escáner o un proxy de intercepción, o resolviendo los ejercicios a mano para entender el mecanismo exacto de cada vulnerabilidad. También sirve para ver, con el código a la vista, cómo una validación mal escrita se vuelve explotable y cómo el nivel impossible la corrige. La condición que la hace segura de usar es que corra siempre dentro de un entorno aislado, típicamente una máquina virtual con red en modo NAT, sin salida hacia una red pública ni hacia internet.

¿Cómo se instala hoy?

La vía que recomienda actualmente el propio proyecto es Docker Compose: con Docker instalado dentro de tu máquina virtual aislada, clonás el repositorio oficial de digininja en GitHub y ejecutás docker compose up -d, lo que levanta en un solo paso tanto la aplicación como la base de datos ya conectadas entre sí. Esta vía tiene una ventaja extra: en el archivo de composición podés fijar de antemano variables como el nivel de seguridad por defecto, en vez de tener que cambiarlo después desde la interfaz. Las otras dos vías siguen existiendo: un paquete para Windows que integra servidor web, PHP y base de datos, donde copiás la carpeta de DVWA dentro del directorio público de ese paquete; y, para sistemas basados en Debian, un script de instalación automatizado que no pertenece al proyecto oficial, sino que lo mantiene un tercero, por lo que conviene revisarlo antes de ejecutarlo, ya que suele pedir privilegios de administrador. Elijas la que elijas, la instalación completa tiene que quedar dentro de la máquina virtual aislada, nunca en un servidor con salida a internet.

¿Cómo se configura la base de datos la primera vez?

El primer arranque de DVWA sigue siempre la misma secuencia, sin importar cómo la hayas instalado. Primero copiás el archivo de configuración de ejemplo, config/config.inc.php.dist, con el nombre config/config.inc.php: ese archivo define los datos de conexión a la base de datos y el nivel de seguridad con el que arranca la aplicación. Después entrás a DVWA desde el navegador, dentro de tu máquina virtual, y vas a la sección Setup DVWA, que revisa que la configuración y las extensiones de PHP necesarias estén disponibles; si falta algo, esa pantalla te lo señala en rojo. El paso que realmente crea la base de datos es pulsar el botón Create / Reset Database: crea las tablas que la aplicación necesita y carga los datos iniciales, incluida la cuenta de usuario admin. Ese mismo botón sirve después para restaurar la base de datos si un ejercicio la dejó inconsistente.

¿Qué son los niveles de seguridad y para qué sirven?

DVWA resuelve cada ejercicio con cuatro niveles de dificultad distintos, que se eligen desde la sección DVWA Security de la propia interfaz: low, sin ninguna protección; medium, con defensas parciales parecidas a las de código real escrito sin mucho cuidado; high, con defensas más sólidas que obligan a buscar variantes del ataque; e impossible, con el código corregido siguiendo buenas prácticas, que sirve como referencia de la solución. El dato que conviene tener presente es que el valor con el que viene configurada la aplicación de fábrica no es low, sino impossible, algo contraintuitivo para quien instala DVWA esperando explotar la falla de inmediato. Si un ejercicio de inyección SQL o de XSS parece no reaccionar a nada de lo que probás, lo primero que hay que revisar es el nivel de seguridad activo, no la instalación ni el payload. La forma más provechosa de usar los niveles es recorrer un mismo ejercicio de low a impossible en orden, para ver cómo cada nivel va cerrando la falla a medida que el código agrega validaciones.

¿Por qué nunca debe exponerse a internet?

Porque DVWA no tiene ninguna de las protecciones que esperarías de una aplicación real: eso es justamente lo que la hace útil para practicar. El propio proyecto lo advierte de forma explícita: no debe subirse nunca a la carpeta pública de un proveedor de alojamiento ni a ningún servidor expuesto a internet, porque será comprometida. No es un riesgo teórico: es un resultado casi garantizado apenas alguien la encuentre escaneando la red, algo constante y automatizado en internet. La recomendación concreta del proyecto es instalarla dentro de una máquina virtual con la red configurada en modo NAT (traducción de direcciones de red, que le da salida controlada sin exponerla como un servicio accesible desde afuera), y montar dentro de esa misma máquina tanto el servidor web como la base de datos. Ese aislamiento es la única razón por la que resulta seguro tener, en la misma computadora, una aplicación llena de fallas explotables: nadie más que vos puede alcanzarla.

¿Cuáles son las credenciales por defecto y por qué eso es parte del ejercicio?

DVWA viene con una única cuenta creada de fábrica: usuario admin, contraseña password. El propio README del proyecto señala, con cierta ironía, que son credenciales fáciles de adivinar mediante un ataque de fuerza bruta, es decir, probando automáticamente muchas combinaciones hasta dar con la correcta. Lejos de ser un descuido, es exactamente el punto: una de las primeras prácticas razonables sobre DVWA es intentar ese mismo ataque de fuerza bruta contra su formulario de login, para entender cómo se detecta y se mitiga ese ataque en un sistema real, por ejemplo limitando los intentos. No tiene sentido cambiar esas credenciales pensando que así la aplicación queda «más segura»: si las cambiás, perdés la posibilidad de practicar ese ejercicio puntual, y el resto de la aplicación sigue siendo deliberadamente vulnerable en todo lo demás. La seguridad de DVWA nunca depende de la contraseña del admin: depende exclusivamente de que la máquina donde corre esté aislada de cualquier red que no controles.

Fuentes

Documentación oficial y aportes de la comunidad consultados para esta guía. Fecha de consulta: 29 de julio de 2026.

Aportes de la comunidad Underc0de

  1. Underc0de, foro. [SOLUCIONADO] Bruteforce a la página de login de DVWA con OWASP ZAP, por jmgarciag, con respuestas de DtxdF, 26 de octubre de 2018, sección Dudas generales. Antecedente de que la comunidad ya practicaba con DVWA; no es una guía de instalación, así que los pasos de esta sección corresponden al proyecto oficial actual, no a ese hilo.

Documentación oficial

  1. digininja. Repositorio oficial de DVWA. Código fuente, vías de instalación con Docker Compose y estado del proyecto.
  2. digininja. README de DVWA. Advertencia sobre exposición a redes públicas, configuración inicial, niveles de seguridad y credenciales por defecto.