Este laboratorio sería la continuación del anterior SQL injection UNION attack, donde mediante la modificación de la consulta a través de la inyección SQL con UNION attack, conseguíamos deducir cuántas columnas tenía la base de datos y cuál de ella contenía una cadena de texto que será la que potencialmente aloje datos.
Utilizamos Burp Suite para capturar la solicitud HTTP y modificar el parámetro category
que está enviando el cliente. Esto permite insertar el payload para manipular la consulta SQL ejecutada en el servidor.
En este caso vamos a extraer los usuarios y contraseñas que están alojadas en la columna que ya detectamos y que contiene una cadena de texto o string. Lo haremos mediante el ataque UNION usando como usuario el administrator. |
Como siempre, este Lab se encuentra dentro del listado de laboratorios de la plataforma de Portswigger Web Security Academy dentro de la vulnerabilidad SQL injection como Practitioner.
Inicialmente lo que hacemos es acceder a la página del laboratorio, y antes de clicar en cualquier categoría, abrimos BurpSuite dentro de Kali, activamos «On» la petición y activamos el FoxyProxy para enviar a Burp la petición y así manipularla.
Clicamos en cualquier categoría, vamos a la petición GET en la pestaña Proxy y la enviamos al Repeater con el botón derecho sobre la petición (o Control+R).
Desactivamos la intercepción de la petición en BS, y ya en el Repeater hacemos la inyección de SQL. La idea sería seguir el mismo payload que en el lab anterior donde con NULL averiguábamos cuántas columnas había en la base de datos, y de esas columnas, cuáles de ellas tenían una cadena string, por lo que vamos a ir probando la combinación de los siguientes comandos hasta dar con ello:
'+UNION+SELECT+NULL,NULL,NULL--
NULL para averiguar el número de columnas, en este caso después de probar vemos que tiene 2 columnas (si pones 3 NULLs devuelve un 500 pero con 2 NULLs da un 200).
ahora necesitamos saber si las dos contienen texto o no, para ello probamos con el comando ‘abc’, por ejemplo:
'+UNION+SELECT+'abc','def'--
y vemos como nos devuelve un 200, por lo que ambas columnas contienen texto.
Por tanto, y sabiendo esto, lo que vamos a hacer es extraer los valores de las columnas username
y password
de la tabla users
.
Supondremos que esa tabla users existe, y conociendo que contiene dos columnas, aplicamos este payload:
'+UNION+SELECT+username,+password+FROM+users--
El resultado devuelve un 200, y si vamos a la página del laboratorio en el navegador, vemos el listado de usuarios y contraseñas:
Conocemos el usuario administrator y la contraseña, por lo que procedemos a logarnos en la cuenta con esas credenciales, y nos da como resuelto este laboratorio.