Qué vas a hacer
Una página web pide información a una base de datos con una pregunta escrita en un lenguaje llamado SQL. Si la página pega lo que escribes directamente dentro de esa pregunta, puedes cambiar la pregunta. Eso se llama inyección SQL y es uno de los fallos más comunes de la web. DVWA te deja hacerlo sin peligro y después te enseña la solución.
La única regla
Advertencia
Este laboratorio ejecuta una página web insegura a propósito. Ataca solo esa web y nada más. Es tu copia privada, sin 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 1990.
Antes de empezar
Nota
Pulsa Iniciar el laboratorio en la barra de la parte superior de esta lección y espera hasta que diga que está en marcha. La página web se abre desde el enlace DVWA de la barra. Cada botón Ejecutar de abajo 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. Comprueba que la página funciona
La barra del laboratorio dice que el laboratorio está en marcha. Ahora comprueba la página: este comando pide su página de inicio de sesión desde tu terminal, y 200 significa que ha respondido.
curl -s -o /dev/null -w "%{http_code}\n" http://dvwa/login.phpSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
2. Inicia sesión
Pulsa el enlace DVWA de la barra del laboratorio e inicia sesión como admin con la contraseña password. En el menú de la izquierda elige DVWA Security y comprueba que pone low (bajo).
3. Haz una pregunta normal
En el menú elige SQL Injection. Escribe 1 en la casilla User ID y pulsa Submit (enviar). La página responde con un usuario: admin. Ha construido una pregunta como "dame el usuario cuyo ID es 1" con lo que escribiste.
4. Cambia la pregunta
Ahora escribe esto en la misma casilla y pulsa Submit:
1' OR '1'='1
La ' cortó antes de tiempo la pregunta de la página, y OR '1'='1 añadió una condición que siempre se cumple. Ahora responde con todos los usuarios: admin, Gordon, Hack, Pablo y Bob. Pediste uno y salieron todos, porque la página se fió de lo que escribiste.
5. Lee el código
Pulsa View Source (ver código) al final de la página. En el nivel low, el código mete tu texto directamente en la pregunta. Ese es el error.
6. Mira la solución
Elige DVWA Security, pon el nivel en impossible (imposible) y pulsa Submit. Vuelve a SQL Injection y escribe 1: sigue respondiendo con admin. Ahora escribe la línea del paso 4: no responde con nada. Pulsa View Source otra vez. El código comprueba que el ID sea un número. Envía la pregunta y tu texto por separado, así que tu texto solo puede ser un valor y nunca una parte de la pregunta. Esto se llama consulta parametrizada (parameterised query), y así es como una página web se protege de este ataque.
Para el profesorado
Consejo
Esta lección es un ejemplo pequeño 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. DVWA tiene diez ejercicios más con los mismos cuatro niveles, así que el mismo laboratorio sirve para toda una unidad. Nada se califica automáticamente: pida una captura de cada ejercicio en low y en impossible, y una frase sobre qué cambió. Cópiela en su propio módulo y cámbiela, o cree una desde cero con el menú Laboratorio del editor de lecciones.