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 = 1Flujo 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:
Respuesta sin modificar:


Petición modificada con payload '--
'--Por ejemplo, sabiendo que la consulta realizada es:
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:
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:
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:
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