Lab: SQL injection UNION attack, determining the number of columns returned by the query – Portswigger [Write Up]

Este laboratorio contiene una inyección SQL en el filtro de categoría de producto a través de la manipulación de la url. Los resultados de la consulta son devueltos en la respuesta de la aplicación por lo que podemos usar el ataque UNION para recoger la data de otras tablas.

El primer paso es determinar el número de columnas que son devueltas por la consulta, después usaremos el ataque UNION para completarlo.

En este caso sencillo de iniciación al ataque UNION en SQL, el objetivo es averiguar el número de items o columnas que tiene nuestra BBDD a través de la consulta de la petición.

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 sustituyendo el nombre de la categoría por este código:

'+UNION+SELECT+NULL-- 

Esto significa lo siguiente:

  • El operador UNION permite combinar los resultados de dos consultas SQL. Esto es útil para inyectar una consulta personalizada y obtener información que no estaría disponible de forma predeterminada.
    • En este caso, la consulta intenta comprobar si el ataque es viable seleccionando un valor NULL (sirve para identificar el número correcto de columnas en la tabla).
    • Si el servidor responde correctamente a NULL (sin errores), sabemos que el ataque es posible y procedemos a enumerar columnas, datos, tablas, etc.
  • El carácter -- se utiliza para comentar el resto de la consulta SQL original.

En nuestro caso, si pruebo con un solo valor de NULL o dos de esta forma:

'+UNION+SELECT+NULL,NULL-- 

el servidor nos devuelve una respuesta de error 500, es decir, que mínimo existe una columna en esa tabla, por lo que si le incluimos otro comando NULL más, el servidor nos devuelve con un 200, es decir, tiene 3 columnas (si pruebas a incluir más NULLs te dará 500).

'+UNION+SELECT+NULL,NULL,NULL-- 

Sabiendo el número correcto de columnas 3, se podría reemplazar cada NULL con nombres de tablas o columnas sensibles como lo siguientes para continuar con la explotación, pero el ejercicio de este lab ya quedaría resuelto con lo anterior:

'+UNION+SELECT+username,password+FROM+users--

Otros posts relacionados