
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. To construct such an attack, you first need to determine the number of columns returned by the query. You can do this using a technique you learned in a previous lab. The next step is to identify a column that is compatible with string data.
The lab will provide a random value that you need to make appear within the query results. To solve the lab, perform a SQL injection UNION attack that returns an additional row containing the value provided. This technique helps you determine which columns are compatible with string data.
SQL injection UNION attack, finding a column containing text writeup
Nota: Para completar este laboratorio es necesario saber cómo completar el laboratorio anterior, ‘SQL injection UNION attack, determining the number of columns returned by the query‘.
Para realizar este laboratorio, debemos afrontarlo en tres pasos:
Encontrar la vulnerabilidad SQL
Al entrar en el laboratorio veremos una tienda online que permite filtrar por categoría. Recogemos en el ‘Logger’ la petición de filtrar por categoría:

Nos llevamos esta petición al ‘Repeater’ con Ctrl + R o Click derecho -> Send to Repeater. Allí probaremos las siguientes peticiones para saber si podemos realizar una inyección SQL:
/filter?category=Gifts'+and+1=1--
Con esta URL nos debería de aparecer el listado normal de los productos con la categoría ‘Gifts’
/filter?category=Gifts'+and+1=2--
Con esta URL no debería de aparecer ningún producto.
Lo que sucede es lo siguiente:
- ‘: Cierra la consulta definida por el desarrollador.
- and: Añade una condición más a la lista de productos a filtrar.
- 1=1: Es siempre cierto
- 1=2: Es siempre falso.
- Para que el producto se muestre, la consulta debe de devolver siempre cierto. En este caso, la consulta que hemos definido con 1=1 comprueba si el producto es de la categoría ‘Gifts’ y 1=1 (cierto), por lo que devuelve todos los productos de ‘Gifts’.
- En el segundo caso (1=2), la consulta comprueba que el producto sea de la categoría ‘Gifts’ y 1=2, por lo que devuelve falso y no añade el producto a la lista a mostrarnos
Los resultados son loas siguientes:
Para 1=1:

Para 1=2:

Con lo cual, ya hemos encontrado dónde realizar la inyección SQL.
Comprobar cuántas columnas hay
Usaremos la técnica del laboratorio anterior y veremos que hay 3 columnas:

Hacer que el laboratorio devuelva la cadena de caracteres solicitada
Para esto vamos a sustituir los ‘null’ uno a uno con la cadena proporcionada. En cuanto encontremos la columna que devuelva el tipo de dato de texto se insertará nuestra cadena como un producto más.

Nota: Encima de ‘Request’ hay un botón ‘<‘ que permite volver a la petición anterior, haciendo más fácil probar cuál es el hueco que devuelve texto.
Ahora al volver al navegador habremos finalizado el laboratorio:
