Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data
Vulnerabilidad de inyección SQL en la cláusula WHERE que permite la extracción de datos ocultos.
Información del laboratorio
https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data
En este laboratorio hay una vulnerabilidad de inyección SQL en el filtro de la categoría del producto.
Cuando el usuario selecciona una categoría, la aplicación realiza una consulta SQL como la siguiente:
SELECT * FROM products WHERE category = 'Accessories' AND released = 1
Flujo de explotación
Captura de la petición
Para capturar la petición, se realiza click sobre la funcionalidad de filtrado:

Tras ello, se captura la petición en Burp. Para poder identificar si es vulnerable a SQLi y manipular la consulta de forma que obtengamos la información que queramos, se pueden probar múltiples payloads.
Respuesta sin modificar
Primero hay que observar cuál es la respuesta sin alterar, de forma que posteriormente al insertar el payload podamos identificar el cambio en el comportamiento.
Petición:
GET /filter?category=Accessories HTTP/2
Host: 0a5f004c03a7205380b7d16a00b1009b.web-security-academy.net
Cookie: session=rkEdMX4V5gH6e1eu06nf4HRxl2bVD5VH
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36
Referer: https://0a5f004c03a7205380b7d16a00b1009b.web-security-academy.net/filter?category=Accessories
Respuesta sin modificar:


Petición modificada con payload '--
'--
Por ejemplo, sabiendo que la consulta realizada es:
SELECT * FROM products WHERE category = 'Accessories' AND released = 1
Se podría insertar el payload '--
, que provocaría que la consulta quedara de la siguiente forma y muestre los items sin que cumplan la condición released = 1
:
SELECT * FROM products WHERE category = 'Accessories'--' AND released = 1
Con dicha modificación la petición mostraría un item más, esto confirma que hemos podido alterar la consulta:


Ahora vamos a modificarla de forma que se pueda obtener toda la información de los items, para ello, se puede usar una consulta lógica que siempre se cumpla, y por lo tanto, obtengamos todos los datos sin filtrar.
Petición modificada con payload 'or'1337'='1337'--
'or'1337'='1337'--
Existen múltiples payloads que permiten provocar que una condición se cumpla, el payload elegido dependerá de muchos factores. Un ejemplo clásico es usar un operador lógico OR que se añada a la consulta y que al cumplirse siempre, muestre toda la información.
Por ejemplo, sabiendo que la consulta realizada es:
SELECT * FROM products WHERE category = 'Accessories' AND released = 1
Se podría insertar el payload '--
, que provocaría que la consulta quedara de la siguiente forma y muestre los items sin que cumplan la condición released = 1
:
SELECT * FROM products WHERE category = 'Accessories'or'1337'='1337'--' AND released = 1
Con dicha modificación la petición mostraría todos los items de la tabla products
, ya que 1337 siempre es igual a 1337:


Última actualización
¿Te fue útil?