> For the complete documentation index, see [llms.txt](https://beafn28.gitbook.io/beafn28/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://beafn28.gitbook.io/beafn28/web-security/laboratorios-portswigger/business-logic-vulnerabilities.md).

# Business logic vulnerabilities

## Lab: Excessive trust in client-side controls

### Enunciado

Este laboratorio **no valida adecuadamente la entrada del usuario**. Puedes explotar una **falla lógica** en el flujo de compra para adquirir artículos por un precio no previsto. Objetivo: **Comprar una "Lightweight l33t leather jacket".**

Credenciales disponibles:

* **Usuario:** `wiener`
* **Contraseña:** `peter`

### Resolución

Nos logueamos y claro no tenemos dinero para comprar esa chaqueta. Vamos a comprarla como si podríamos de momento pero nos salta error.

Comprobamos mandando la petición al **Repeater** que cada vez que enviamos aumenta la cantidad de chaquetas y por lo tanto de precio. Volvamos a borrar el carrito para cambiar el precio.

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

No nos da error sino que redirige como antes por lo que al actualizar la página vemos que ha cambiado precio.

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

Por lo que ahora ya podemos comprar la chaqueta.

<figure><img src="/files/86J3il2ap2tH6eGFIiNi" alt=""><figcaption></figcaption></figure>

## Lab: High-level logic vulnerability

### Enunciado

Este laboratorio **no valida adecuadamente la entrada del usuario**. Puedes explotar una **falla lógica** en el flujo de compra para adquirir artículos a un **precio no previsto**. **Comprar una "Lightweight l33t leather jacket"** (una chaqueta de cuero l33t ligera).

Credenciales disponibles:

* **Usuario:** `wiener`
* **Contraseña:** `peter`

### Resolución

Nos logueamos con las credenciales y volvemos a intentar comprar esa chaqueta y nos sale error. Con respeto al anterior en la petición no sale el precio por lo que no lo podemos modificar.

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

Eliminamos la chaqueta añadida y miramos la petición siguiente en el que hay un número negativo. Lo mandamos a **Repeater**.

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

Lo enviamos pero nos dice que no debe ser menor que 0 ya que nos salía que el precio es negativo por lo que vamos a añadir un producto para aplicar la resta y así poder comprarla.

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

Enviamos la petición de manera que la cantidad sea negativa y recargamos la página.

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

Al volverla a enviar y recargar.

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

Vemos que se nos ha restado el precio por lo que aumentamos esa cantidad y va disminuyendo.

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

Ya la podemos comprar.

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

## Lab: Inconsistent security controls

### Enunciado

La lógica defectuosa de este laboratorio permite que **usuarios arbitrarios accedan a funcionalidades administrativas** que deberían estar disponibles solo para empleados de la empresa. **Acceder al panel de administración y eliminar al usuario `carlos`.**

### Resolución

Nos copiamos el correo.

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

{% hint style="info" %}
Se podría usar si se tiene la versión de pago para descubrir las URLs en Target -> Engagement Tools -> Discovery Content pero no hace falta.
{% endhint %}

Usamos **dirbuster** para encontrar más enlaces.

```bash
dirb https://0a4000c70468f41e81f92b91005c008b.web-security-academy.net/
```

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

Nos llama la atención este enlace.

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

No tenemos ningún user así por lo que nos registramos.

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

Activamos la cuenta e iniciamos sesión. Como podemos observar podemos actualizar el correo y en el panel de registro se nos dice como debe ser ese correo y claro así podemos entrar en la URL de admin.

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

Se actualiza perfectamente y se nos muestra el panel de admin que antes no se nos mostraba. Ya podemos eliminar al usuario carlos.

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

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

## Lab: Flawed enforcement of business rules

### Enunciado

Este laboratorio contiene una **falla lógica** en su flujo de compra. **Explotar esta falla para comprar una “Lightweight l33t leather jacket”.**

Credenciales disponibles:

* **Usuario:** `wiener`
* **Contraseña:** `peter`

### Resolución

Vemos que es la misma página pero nos sale un descuento. Nos lo copiamos y nos logueamos con las credenciales dadas. Compramos y metemos el cupón que se nos ha descontado 5 dolares.

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

La petición tiene un token, claramente tiene sentido para no usar ese descuento otra vez. Lo comprobamos y no se puede. Mientras revisamos la web nos podemos suscribir a una newsletter.&#x20;

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

Nos sale otro cupón al suscribirnos. Se nos aplica pero solo una vez.

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

Por lo que si observamos el error sale solo si metes otra vez el descuento que acabas de meter, es decir, si metes el otro se te vuelve a descontar. En resumen, vamos a ir metiendo intermitentemente uno y otro hasta poder comprar la chaqueta.

<figure><img src="/files/21YnpVnqdlL20fJRxdJ9" alt=""><figcaption></figcaption></figure>

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