Laboratorio de Mutillidae: practica inyección SQL y XSS en una aplicación web PHP vulnerable

OWASP Mutillidae II es un sitio PHP inseguro a propósito, con el Top 10 de OWASP y mucho más: inyección SQL, cross-site scripting, inyección de comandos, inyección LDAP y muchas otras, con pistas en cada página. Este laboratorio lo inicia, con su base de datos y su directorio LDAP, 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 Top 10 de OWASP en un sitio realista, con muchas debilidades para elegir. El sitio tiene un nivel de seguridad, 0, 1 y 5, que su menú recorre, así que se puede repetir el mismo ejercicio para ver qué cambia la corrección: un nombre inyectado en la búsqueda de usuarios encuentra todas las cuentas en el nivel 0 y ninguna en el nivel 5. Es adecuado para una introducción a la seguridad web o a la programación segura: validación de entradas, codificación de salidas, consultas parametrizadas, autenticación y sesiones.

Ejecútalo en tu navegador

El laboratorio crea la base de datos del alumno, así que no hay nada que preparar, y solo dice que está en marcha cuando el sitio funciona.

  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 OWASP Mutillidae II.
  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». La parte superior de cada página muestra el nivel de seguridad, que empieza en 0. Inicia sesión como admin con la contraseña adminpass en las páginas que piden una cuenta. Toggle Hints y Toggle Security están en el menú. Detener e iniciar el laboratorio da un sitio nuevo, igual que Reset DB.

Qué pedir a los alumnos que entreguen

Una captura de pantalla de cada ejercicio resuelto, 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 cómo debería haberse escrito el código. Para un trabajo más sólido, pide también el mismo ejercicio en el nivel 5 y qué hace el código de forma distinta allí.

Una lección básica en este laboratorio

Mutillidae Basics es una lección breve hecha en este laboratorio, que empieza con la regla de que un alumno ataca su propia copia y nada más. Desde el terminal inician sesión con curl, buscan una cuenta por su nombre, cambian el nombre para que la búsqueda encuentre todas las cuentas, y después suben el nivel de seguridad y ven que la misma entrada no encuentra nada.

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

El código en GitHub

El archivo compose ejecuta las tres imágenes públicas del propio proyecto Mutillidae, una para el sitio, otra para su base de datos MariaDB y otra para su directorio LDAP, cada una fijada por versión y digest y sin modificar. Mutillidae tiene licencia GPL-3.0 y pertenece a sus autores; no lo distribuimos nosotros. El laboratorio no tiene salida a internet, así que lo que busque una página en otro sitio no tiene nada a lo que llegar.

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-mutillidae 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

¿Cuáles son los datos de acceso?
admin con la contraseña adminpass, los mismos en todas las copias, y cualquiera puede crear otra cuenta en la página Login/Register. Una copia es privada del alumno que la inició, y nada fuera de ella puede llegar a ella.
¿Por qué el sitio vuelve al principio al reiniciar?
La base de datos se crea de nuevo cada vez que se inicia el laboratorio y no se guarda, así que un sitio roto por un ejercicio se arregla deteniendo e iniciando el laboratorio, o con Reset DB en el menú.
¿Por qué necesita tanta memoria?
El laboratorio son tres programas, el sitio, su base de datos y su directorio, limitados a 512, 384 y 256 megabytes. Los tres juntos usan unos 210 megabytes en reposo, muy por debajo de lo que permite una copia.