SQL injection UNION attack, determining the number of columns returned by the query writeup

Descripción

This lab contains a SQL injection vulnerability in the product category filter. The results from the query are returned in the application’s response, so you can use a UNION attack to retrieve data from other tables. The first step of such an attack is to determine the number of columns that are being returned by the query. You will then use this technique in subsequent labs to construct the full attack.

To solve the lab, determine the number of columns returned by the query by performing a SQL injection UNION attack that returns an additional row containing null values.

SQL injection UNION attack, determining the number of columns returned by the query writeup

Accedemos al laboratorio e interceptamos con el logger la petición del filtrado por categoría:

Nos llevaremos esta petición al ‘Repeater’ con Ctrl + R o Click derecho -> Send to Repeater. Allí, añadiremos código SQL detrás de ‘Pets’:

Para ver cuántas columnas está devolviendo la consulta SQL, usaremos el siguiente código:

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

La función de este código es la siguiente:

  1. ‘: cierra la consulta SQL original, escrita por el desarrollador.
  2. UNION: Este operador combina los resultados de la consulta original con una nueva consulta inyectada. Para que funcione, ambas consultas deben devolver el mismo número de columnas y tipos de datos compatibles.
  3. SELECT: Nos permite proporcionar los valores de las columnas que deberán de coincidir con la consulta SQL.
  4. NULL: es un tipo de dato universal (que combina con todos los posibles en SQL), lo que hace que todos los valores de la anterior consulta sean válidos.
  5. –: Es un comentario en SQL, quita todo lo que el desarrollador haya añadido detrás de nuestra consulta y se asegura que funcione.
  6. El servidor devolverá un error siempre que la primera consulta (la cerrada con ‘) devuelva un número de columnas distintas a la proporcionada por la segunda consulta. Deben coincidir. Es por ello que, añadiendo más ‘,+NULL’ al final de nuestro código encontraremos el número de columnas en cuanto el servidor no devuelva un error.

Nota: Para que la petición funcione correctamente, deberá de haber un espacio (o ‘+’ al ser codificado como URL) detrás de las comas del NULL.

Al probar con 3 NULL obtendremos una respuesta por parte del servidor:

Y al actualizar la página en el navegador encontraremos que el laboratorio está resuelto:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *