# Lab: SQL injection UNION attack, finding a column containing text

## Información del laboratorio

<https://portswigger.net/web-security/sql-injection/union-attacks/lab-find-column-containing-text>

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

Esta vulnerabilidad es una continuación del laboratorio: [Lab: SQL injection UNION attack, determining the number of columns returned by the query](/labs/portswigger-academy/sql-injection/lab-sql-injection-union-attack-determining-the-number-of-columns-returned-by-the-query.md)

## Flujo de explotación

### Obtener las columnas que pueden contener texto

Para ello, se tendría que generar la lista de payloads de acuerdo al número de columnas (3) obtenido en el laboratorio anterior [Inyección SQL](/pentesting-en-aplicaciones-web/general/ataques-y-vulnerabilidades/inyeccion/inyeccion-sql.md#como-identificar-las-columnas-que-permiten-insertar-texto-en-una-inyeccion-sql-union).

Con este script de bash oneliner se puede obtener la lista de payloads en base al número de columnas (cols) que tiene la tabla de la consulta SQL manipulada:

{% code overflow="wrap" %}

```bash
cols=3; for i in $(seq 1 $cols); do echo "' UNION SELECT $(for j in $(seq  1 $cols); do [ $j -eq $i ] && echo -n "'a'" || echo -n "NULL"; [ $j -lt $cols ] && echo -n ","; done)--"; done
```

{% endcode %}

Esta lista, se inserta en intruder, de la misma forma que en el laboratorio anterior:

<figure><img src="/files/1eiykFoBCadAdDCSDVCw" alt=""><figcaption></figcaption></figure>

Al ejecutar el ataque, se puede observar cómo los campos que permiten la inserción de texto, responden con el código 200 y también se observa una diferencia en el tamaño de la respuesta:

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

Esto quiere decir, que la <mark style="color:$success;">**columna 2**</mark> es la única que permite insertar texto.

Esto se puede observar también desde la aplicación, observando la cadena inyectada unida al resto de información de la tabla:

<figure><img src="/files/8OBAFVQwIyYVDDaYjWLP" 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-union-attack-finding-a-column-containing-text.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.
