Laboratorio de DVWA: practica inyección SQL y XSS en la Damn Vulnerable Web Application

DVWA, la Damn Vulnerable Web Application, enseña una debilidad cada vez: inyección SQL, inyección SQL ciega, inyección de comandos, cross-site scripting (reflejado y almacenado), CSRF, subida de archivos, inclusión de archivos, identificadores de sesión débiles, fuerza bruta y más. Este laboratorio la inicia, con su base de datos, en la copia privada de cada alumno.

Cada objetivo está dentro de la copia de laboratorio del propio alumno, que no tiene ruta a internet ni a ningún otro alumno, así que lo único que puede atacar es la aplicación que el laboratorio inició para él. La regla se enuncia al principio del laboratorio: ataca tu propia copia, nunca un sitio que no sea tuyo.

Qué aprenden los alumnos

El mismo ejercicio en cuatro niveles de seguridad, low, medium, high e impossible, es el mismo código inseguro y luego corregido. El botón View Source de cada ejercicio muestra el código del nivel en vigor, así que el alumno ve qué cambia cada corrección y por qué la corrección fácil no basta. Es adecuado para la programación segura y la corrección: validación de entradas, codificación de salidas, consultas parametrizadas y gestión de archivos.

Ejecútalo en tu navegador

El laboratorio crea la base de datos del alumno, así que no hay nada que preparar. Empieza en el nivel de seguridad low.

  1. Abre la página Contenedor. Abre «Crear» en la barra y elige «Ejecutar un contenedor». Cualquiera puede abrir la página, y el laboratorio de Git y el de SQL se inician sin cuenta. Todos los demás laboratorios necesitan una cuenta gratuita: crea una, inicia sesión y pulsa «Iniciar».
  2. Busca el laboratorio. La tarjeta «Laboratorios de ejemplo» lista todos los ejemplos. Busca DVWA.
  3. Pulsa «Iniciar». «Iniciar» lo ejecuta tal cual, con una sola pulsación. «Editar el archivo primero» abre el archivo compose para que lo cambies antes de iniciarlo.
  4. Ábrelo. En la página del laboratorio, pulsa «Abrir» e inicia sesión como admin con la contraseña password. La página DVWA Security sube el nivel. Detener e iniciar el laboratorio da una DVWA nueva, igual que Create / Reset Database en la página de preparación.

Qué pedir a los alumnos que entreguen

Una captura de pantalla de cada ejercicio resuelto en low y otra en high, con la dirección del propio laboratorio visible, y para cada uno una explicación escrita con sus propias palabras de qué es la debilidad, la entrada que usaron, por qué funcionó y en qué se diferencia el código del nivel high. Para un trabajo más sólido, pide también el código corregido además del ataque.

El código en GitHub

El archivo compose ejecuta la imagen pública de la propia DVWA, fijada por digest, junto a una base de datos MariaDB, como cuentas sin privilegios. DVWA tiene licencia GPL-3.0 y nosotros no la distribuimos. El ejercicio CAPTCHA no está disponible, porque necesita un servicio en internet.

Una lección básica en este laboratorio

DVWA Basics y DVWA Basics 2 son lecciones breves hechas en este laboratorio, cada una con la regla de que un alumno ataca su propia copia y nada más. En la primera hacen una inyección SQL en el nivel low, leen el código que la permite y ven el mismo ejercicio rechazado en el nivel impossible. En la segunda hacen cross-site scripting del mismo modo.

Una cuenta personal gratuita las recibe en el módulo Basics, que está en Inicio, cada centro puede copiarlas de la carpeta Basics de la Biblioteca, y un centro nuevo las tiene en un módulo llamado Lab Basics (Sample). Son deliberadamente breves: muestran a un docente lo que es una lección hecha en un laboratorio, y el laboratorio hace el resto. Copia una en un módulo propio para cambiarla.

Asígnalo como trabajo

Indica en la tarea qué ejercicios completar y qué entregar.

  1. Crea el laboratorio. En tu módulo añade una tarea y elige la tarjeta «Laboratorio de contenedores», y después «En un repositorio de GitHub». Indica https://github.com/mitsurutech/lab-dvwa con la rama main. El archivo compose es el predeterminado, compose.yaml. Haz un fork del repositorio antes si quieres modificarlo.
  2. Publica y pruébalo. «Publicar» fija el commit que te mostraron, así que un cambio posterior en el repositorio no altera un laboratorio que ya has asignado. Inicia primero tu propia copia.
  3. Asígnalo. Asígnalo como cualquier tarea, con una fecha de entrega si quieres, e indica en la tarea qué hacer y qué entregar.
  4. Califica lo entregado. Abre la copia de un alumno y el trabajo que ha entregado, califícalo y devuélvelo con un motivo si necesita más.

Preguntas frecuentes

¿Por qué empieza el laboratorio en el nivel low?
Para que un primer intento funcione. Subir el nivel y repetir el ejercicio es la lección: muestra qué cambia cada defensa.
¿Cuáles son los datos de acceso?
admin y password, los mismos en todas las copias. Una copia es privada del alumno que la inició, y nada fuera de ella puede llegar a ella.
¿Qué deben entregar los alumnos en DVWA?
Una captura de pantalla de cada ejercicio resuelto en el nivel low y otra vez en el nivel high, con la dirección del propio laboratorio a la vista, y para cada uno una explicación escrita de la debilidad, la entrada usada, por qué funcionó y en qué se diferencia el código del nivel high. Para un trabajo más sólido, pide también el código corregido, no solo el ataque.