> For the complete documentation index, see [llms.txt](https://docs.pabloarrabal.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pabloarrabal.com/explotacion/vulnerabilidades/sql-injection-sqli/portswigger-lab-6.md).

# PortSwigger Lab 6

Resolución del 6º laboratorio de SQL injection UNION attack, retrieving multiple values in a single column

> Este laboratorio contiene una vulnerabilidad de inyección SQL en el filtro de categoría de producto. Los resultados de la consulta se devuelven en la respuesta de la aplicación para que pueda usar un ataque UNION para recuperar datos de otras tablas.
>
> La base de datos contiene una tabla diferente llamada `users`, con columnas llamadas `username` y `password`.
>
> Para resolver el laboratorio, realice un ataque UNION de inyección SQL que recupere todos los nombres de usuario y contraseñas, y use la información para iniciar sesión como `administrator` usuario.

Comprobamos que es vulnerable:

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FZcWaTk4XfeGh7G5UBt0C%2Fimage.png?alt=media&amp;token=5fdba157-e17a-43c9-aae7-0e7dae03852b" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}

## ¿Porque `/filter?category=Pets' UNION SELECT username,password FROM users--` no funciona?

<img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FDn29pg8gNnltoOFGvg7V%2Fimage.png?alt=media&amp;token=3563bb41-f440-4ae8-abdd-1059ff980d78" alt="" data-size="original">\
\
Este payload no funciona porque esta tabla, solo admite un campo de tipo String.

¿Que debemos hacer en esta situación?

Podemos mostrar en la primera columna un valor NULL y en la segunda (que es la que admite el String) mostramos los valores de usuario y contraseña.\
Estos valores, como son 2 campos en la misma columna, debemos de concatenarlos para que actúen como uno solo
{% endhint %}

Buscamos el campo que admite String:

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FqhiAFiajiMPn9gK1hqs7%2Fimage.png?alt=media&amp;token=49992fed-4ac1-4bda-b3f1-92750a0bb658" alt=""><figcaption></figcaption></figure>

Tras ver que es el 2º, en el primero inyectaremos un valor nulo y en el segundo la concatenación de los valores que nos pide el lab (username y password):

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FQSW6RUowm45j6poqrfkh%2Fimage.png?alt=media&amp;token=83affba3-f2a4-4a20-a7f6-a92f0252aaca" alt=""><figcaption></figcaption></figure>

Una ves tenemos las credenciales, iniciamos sesión y resolvemos el lab:

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FjjpBg3YAUHcCdXlN1W0U%2Fimage.png?alt=media&amp;token=c0d6af3d-36d9-41e5-9e56-e2071eabd6b1" alt=""><figcaption></figcaption></figure>
