> 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/pt-br/web-vulnerabilities/api-attack/abus-dapi-pentesting-web.md).

# Abuso de API

## Instalação do servidor web a partir do GitHub (abuso de 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

```

* Nós **cadastre-se** um novo usuário: ![](/files/bc2a25fa5d29fb478756eb3b3866353032f57db5)

## Reconhecimento da API

* Para encontrar vulnerabilidades de API, é importante começar com **um bom reconhecimento**. Na seção Network, capture a requisição como você faria com [Burp Suite](/pt-br/hacking-tools/web/burpsuite.md) usando XHR: ![](/files/a2c9eac6c17312d9aadaedecc4e1e189d45de95c)
* Para **estruturar e armazenar** todas as requisições da API corretamente, usamos **Postman**:

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

```

* Criar um novo **coleção** onde todas as requisições da API são agrupadas. Para **POST** requisições, cole o **URL** e especialmente o raw **corpo**: ![](/files/ca5d24518eadcb35de13b86aff7921b65cd406bc) ![](/files/9c996b397d6e427fb91ee3cc2bf9cdec810328f8)
* Ele retorna o **token com a estrutura JWT** do login: ![](/files/cc410c3caf0a05c56efbf987c1d14fc2c0893654)
* Crie uma variável chamada **accessToken** com o valor do token de login: ![](/files/ea89987757205bc6bb67ce46978bd03f9c6e0156)
* Na seção **authorization**, associe a variável ao tipo **Bearer Token**: ![](/files/f393ca8cb6ba3a8807f8e9d9de0f41785a9638c0)
* Salve tudo **requisições possíveis**:

1. Painel: ![](/files/2f0ae705b51b8149436b7c05c939df50a46a7508)
2. Produtos: ![](/files/c841b6d77096b3e7566a6707bd474becfe9076a9)
3. Comando: ![](/files/7e973e48583a517d4774de2f34952c9f8e3668eb)

## Vulnerabilidades relacionadas ao abuso de API:

### Recuperação de token por força bruta:

Há uma opção para **redefinir a senha** obtendo um token por e-mail:

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

Na porta *8025*, há um **SMTP** onde recebemos o token:

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

Clique **Esqueci minha senha** com o endereço de e-mail da conta cuja senha você deseja alterar:

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

Capturamos o **query** para a API:

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

Enviamos a requisição como **POST** com a estrutura raw:

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

Usamos **ffuf** para iniciar um **ataque de força 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

```

O **token de confirmação** 0172 retornou um **código de status de sucesso** e a senha foi alterada automaticamente:

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

### Modificar preços de produtos e aumentar o saldo disponível:

Pesquisamos com **ffuf** o método possível da requisição **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

```

São todos os **métodos possíveis**:

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

Se trocarmos de **GET** para **POST**, isso é o que acontece:

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

Esta é uma **atribuição em massa** vulnerabilidade que permite a criação de produtos por meio de **POST** requisições. Nesse caso, criamos um produto com um **negativo** preço:

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

Dessa forma, ele é **interpretado** pelo servidor web:

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

Como o preço é **negativo**, toda vez que clicamos **comprar**, 10.000 dólares são adicionados ao nosso saldo:

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

Se, na requisição **pedidos**, inserirmos o número do produto com, por exemplo, uma quantidade de 100, nosso saldo será multiplicado por **100 x 10.000**:

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

### Encontre um código de cupom válido:

Enviamos a requisição de **validate-coupon**:

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

Como o cupom está **incorreto**, o servidor não retorna nada:

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

Se tentarmos executar uma injeção [NoSQL ](/pt-br/web-vulnerabilities/nosql-attack.md)porque o banco de dados está **MongoDB**, ele responde com o código do cupom:

<figure><img src="/files/bbcf5bb5a31beda5adfea7513b18b19711e5e8ca" 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/pt-br/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.
