> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/es/web-vulnerabilities/api-attack/abus-dapi-pentesting-web.md).

# Abuso de API

## Instalación del servidor web desde GitHub (abuso de la API)

```bash
curl -o docker-compose.yml https://raw.githubusercontent.com/OWASP/crAPI/main/deploy/docker/docker-compose.yml
docker-compose pull
docker-compose -f docker-compose.yml --compatibility up -d

```

* Nosotros **registrar** un nuevo usuario: ![](/files/ec64d8e0920cf1e50f732a9e511439d1894ed260)

## Reconocimiento de la API

* Para encontrar vulnerabilidades de la API, es importante comenzar con **un buen reconocimiento**. En la sección Network, captura la solicitud como lo harías con [Burp Suite](/es/hacking-tools/web/burpsuite.md) usando XHR: ![](/files/5e4c2e9a96373da4e71bf43e96c0ef5327f09cae)
* Para **estructurar y almacenar** todas las solicitudes de la API correctamente, usamos **Postman**:

```javascript
postman & disown &>/dev/null

```

* Crear una nueva **colección** donde se agrupan todas las solicitudes de la API. Para **POST** solicitudes, pega el **URL** y especialmente la solicitud en bruto **cuerpo**: ![](/files/bae3a756629b108ac28304db481dd648888f0a1f) ![](/files/f3c3d97de3923e31c04edc7f6a12e9fd065949ab)
* Devuelve el **token con la estructura JWT** del inicio de sesión: ![](/files/5d2c8ae9ebd17a71aa86b4f4c7edb64e35131f91)
* Crea una variable llamada **accessToken** con el valor del token de inicio de sesión: ![](/files/7e6ec9264da6da0831b6582e982acf2e0f649586)
* En la sección **autorización**, asocia la variable al tipo **Bearer Token**: ![](/files/afcf1d300d60e7ff79fbf9fe6f552d68fbc04ee4)
* Guarda todos **las solicitudes posibles**:

1. Panel de control: ![](/files/bc6b94b2eb4da293f65a1aad4f64d01f87a8c831)
2. Productos: ![](/files/ba10395c2bb1d18cd641b3accc8645f785685338)
3. Comando: ![](/files/052eee17ce79caadcbcfa99a00fda7ee02fb443d)

## Vulnerabilidades relacionadas con el abuso de la API:

### Recuperación de token por fuerza bruta:

Hay una opción para **restablecer la contraseña** recuperando un token por correo electrónico:

<figure><img src="/files/0833f721c90337368f62b1139887458d90ab5b7b" alt="" width="563"><figcaption></figcaption></figure>

En el puerto *8025*, hay un **SMTP** donde recibimos el token:

<figure><img src="/files/66bf51ed6f44470e638430408b24348171fa095f" alt="" width="563"><figcaption></figcaption></figure>

Haga clic **Olvidé mi contraseña** con la dirección de correo electrónico de la cuenta cuya contraseña quieres cambiar:

<figure><img src="/files/8846785e8e1775412762c9d177ee0cb955c2923e" alt="" width="563"><figcaption></figcaption></figure>

Capturamos el **query** a la API:

<figure><img src="/files/ed368ce0a9245143d43c4db4fe2c7a927fbd0608" alt="" width="563"><figcaption></figcaption></figure>

Enviamos la solicitud como **POST** con la estructura en bruto:

<figure><img src="/files/7b00cf0060f536e00f34f9c5b93605e7c3b21143" alt="" width="563"><figcaption></figcaption></figure>

Usamos **ffuf** para lanzar un **ataque de fuerza bruta**:

```graphql
ffuf -u http://localhost:8888/identity/api/auth/v2/check-otp -w /usr/share/SecLists/Fuzzing/4-digits-0000-9999.txt -X POST -d '{"email":"jordan@jordan.com","otp":"FUZZ","password":"Password1234*"}' -H "Content-Type: application/json" -p 1 -mc 200

```

El **token de confirmación** 0172 devolvió un **código de estado exitoso** y la contraseña se ha cambiado automáticamente:

<figure><img src="/files/5016a791588664323d1fba6b1e080ca8a7631ffa" alt="" width="563"><figcaption></figcaption></figure>

### Modificar los precios de los productos y aumentar el saldo disponible:

Buscamos con **ffuf** el método posible de la solicitud **products**:

```bash
ffuf -u http://localhost:8888/workshop/api/shop/products -w /usr/share/SecLists/Fuzzing/http-query-methods.txt -X FUZZ -p 1 -mc 200,401

```

Estos son todos **métodos posibles**:

<figure><img src="/files/abaae91fbf3ea1e78e7002edd11977f2f8da8475" alt="" width="563"><figcaption></figcaption></figure>

Si cambiamos de **GET** a **POST**, esto es lo que sucede:

<figure><img src="/files/e26dc9ec23cc19db107c76fa930f6d525c8a632e" alt="" width="563"><figcaption></figcaption></figure>

Esta es una **asignación masiva** vulnerabilidad que permite crear productos mediante **POST** solicitudes. En este caso, creamos un producto con un **negativo** precio:

<figure><img src="/files/6e58abfcba64748513bdb2f81dd72bf7e33c3644" alt="" width="563"><figcaption></figcaption></figure>

De esta manera, se **interpreta** por el servidor web:

<figure><img src="/files/eb7c43942230e820e947fd5160eb0197ddaab91b" alt="" width="563"><figcaption></figcaption></figure>

Como el precio es **negativo**, cada vez que hacemos clic en **comprar**, se añaden 10 000 dólares a nuestro saldo:

<figure><img src="/files/9142f20947d316ae6cdc2bb81a90ef2d4829d866" alt="" width="563"><figcaption></figcaption></figure>

Si en la solicitud **órdenes**, insertamos el número del producto con, por ejemplo, una cantidad de 100, nuestro saldo se multiplicará por **100 x 10 000**:

<figure><img src="/files/591364f58b2fdc74ca8498c7dfb0cb46e18d71ca" alt="" width="563"><figcaption></figcaption></figure>

### Encontrar un código de cupón válido:

Enviamos la solicitud de **validate-coupon**:

<figure><img src="/files/f98def6fb4a4ce7dcffa1f5a7e11afe22564d41e" alt="" width="563"><figcaption></figcaption></figure>

Como el cupón es **incorrecto**, el servidor no devuelve nada:

<figure><img src="/files/e415014a5de9a4c0ba34e94859a1733638ae7074" alt="" width="524"><figcaption></figcaption></figure>

Si intentamos ejecutar una inyección [NoSQL ](/es/web-vulnerabilities/nosql-attack.md)porque la base de datos es **MongoDB**, responde con el código de cupón:

<figure><img src="/files/cb0d534589e80115b87a0c8bdb6e5cdba737996e" alt="" width="563"><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/es/web-vulnerabilities/api-attack/abus-dapi-pentesting-web.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
