hacktricks/network-services-pentesting/pentesting-web/web-api-pentesting.md

247 lines
16 KiB
Markdown
Raw Normal View History

# Pentesting de Web API
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
2023-06-06 18:56:34 +00:00
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** com as ferramentas comunitárias mais avançadas do mundo.\
Acesse hoje mesmo:
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
2022-06-06 22:28:05 +00:00
2023-06-06 18:56:34 +00:00
## Informações Básicas
2021-06-08 18:47:44 +00:00
2023-06-06 18:56:34 +00:00
Principal:
2022-09-05 10:17:20 +00:00
2023-06-06 18:56:34 +00:00
* **Serviços Web (SOAP/XML)**
* A documentação usa o formato **WSDL** e geralmente é salva no caminho `?wsdl`, como `https://api.example.com/api/?wsdl`
* Um exemplo dessa documentação pode ser encontrado em [http://www.dneonline.com/calculator.asmx](http://www.dneonline.com/calculator.asmx) (documento WSDL em [http://www.dneonline.com/calculator.asmx?wsdl](http://www.dneonline.com/calculator.asmx?wsdl)) e você pode ver um exemplo de solicitação chamando o método `Add` em [http://www.dneonline.com/calculator.asmx?op=Add](http://www.dneonline.com/calculator.asmx?op=Add)
* Para analisar esses arquivos e criar solicitações de exemplo, você pode usar a ferramenta **SOAPUI** ou a extensão **WSDLer** do Burp Suite.
* **APIs REST (JSON)**
* A documentação padrão é o arquivo WADL. Encontre um exemplo aqui: [https://www.w3.org/Submission/wadl/](https://www.w3.org/Submission/wadl/). No entanto, existem outras ferramentas de representação de API mais amigáveis para desenvolvedores, como [https://swagger.io/tools/swagger-ui/](https://swagger.io/tools/swagger-ui/) (verifique a demonstração na página)
* Para analisar esses arquivos e criar solicitações de exemplo, você pode usar a ferramenta **Postman**
* [**GraphQL**](graphql.md)
## Laboratórios
* [**VAmPI**](https://github.com/erev0s/VAmPI)**:** VAmPI é uma API vulnerável feita com Flask e inclui vulnerabilidades do OWASP top 10 para APIs.
## Truques
### SOAP/XML
Esse tipo de API pode ser [**vulnerável a XXE**](../../pentesting-web/xxe-xee-xml-external-entity.md), mas geralmente as **Declarações DTD** são **desativadas** na entrada do usuário.
Você também pode tentar usar tags CDATA para inserir payloads (desde que o XML seja válido)
![](<../../.gitbook/assets/image (534).png>)
### Verificar Acesso
Normalmente, alguns endpoints da API vão precisar de mais privilégios do que outros. Sempre tente acessar os endpoints mais privilegiados a partir de contas menos privilegiadas (não autorizadas) para ver se é possível.
### CORS
Sempre verifique a configuração [**CORS**](../../pentesting-web/cors-bypass.md) da API, pois se estiver permitindo o envio de solicitações com credenciais do domínio do atacante, muitos danos podem ser causados por meio de [**CSRF**](../../pentesting-web/csrf-cross-site-request-forgery.md) em vítimas autenticadas.
### Padrões
Procure por padrões de API dentro da API e tente usá-los para descobrir mais.\
Se você encontrar _/api/albums/**\<album\_id>**/photos/**\<photo\_id>**_\*\* \*\* você também pode tentar coisas como _/api/**posts**/\<post\_id>/**comment**/_. Use algum fuzzer para descobrir esses novos endpoints.
### Adicionar parâmetros
Algo como o exemplo a seguir pode permitir o acesso ao álbum de fotos de outro usuário:\
_/api/MyPictureList → /api/MyPictureList?**user\_id=\<other\_user\_id>**_
### Substituir parâmetros
Você pode tentar **fuzzar parâmetros** ou **usar** parâmetros **que você viu** em outros endpoints para tentar acessar outras informações.
Por exemplo, se você vir algo como: _/api/albums?**album\_id=\<album id>**_
Você pode **substituir** o parâmetro **`album_id`** por algo completamente diferente e potencialmente obter outros dados: _/api/albums?**account\_id=\<account id>**_
### Poluição de parâmetros
/api/account?**id=\<seu id de conta>** → /api/account?**id=\<seu id de conta>\&id=\<id da conta do administrador>**
### Parâmetro curinga
Tente usar os seguintes símbolos como curingas: **\***, **%**, **\_**, **.**
* /api/users/\*
* /api/users/%
* /api/users/\_
* /api/users/.
### Alteração do método de requisição HTTP
Você pode tentar usar os métodos HTTP: **GET, POST, PUT, DELETE, PATCH, INVENTED** para verificar se o servidor web retorna informações inesperadas com eles.
### Tipo de conteúdo da requisição
Tente brincar com os seguintes tipos de conteúdo (modificando o corpo da requisição) para fazer com que o servidor web se comporte de forma inesperada:
* **x-www-form-urlencoded** --> user=test
* **application/xml** --> \<user>test\</user>
* **application/json** --> {"user": "test"}
### Tipos de parâmetros
Se os dados **JSON** estiverem funcionando, tente enviar tipos de dados inesperados como:
* {"username": "John"}
* {"username": true}
* {"username": null}
* {"username": 1}
* {"username": \[true]}
* {"username": \["John", true]}
* {"username": {"$neq": "lalala"\}}
* qualquer outra combinação que você possa imaginar
Se você puder enviar dados **XML**, verifique as [injeções XXE](../../pentesting-web/xxe-xee-xml-external-entity.md).
Se você enviar dados POST regulares, tente enviar arrays e dicionários:
* username\[]=John
* username\[$neq]=lalala
### Brinque com as rotas
`/files/..%2f..%2f + ID da vítima + %2f + nome do arquivo da vítima`
### Verifique possíveis versões
Versões antigas ainda podem estar em uso e ser mais vulneráveis do que os endpoints mais recentes
* `/api/v1/login`
* `/api/v2/login`\\
* `/api/CharityEventFeb2020/user/pp/<ID>`
* `/api/CharityEventFeb2021/user/pp/<ID>`
### Verifique possíveis versões (abordagem automatizada)
Extensão AutoRepeater Burp: Adicione uma regra de substituição
* `Tipo: String de Requisição`
* `Correspondência: v2 (versão mais alta)`
* `Substituir por: v1 (versão mais baixa)`
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
\
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para criar e **automatizar fluxos de trabalho** com facilidade, usando as ferramentas comunitárias mais avançadas do mundo.\
Acesse hoje mesmo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 🛡️ API Security Empire Cheat Sheet
\
Autor do Cheat Sheet: [Momen Eldawakhly (Cyber Guy)](https://www.linkedin.com/in/momen-eldawakhly-3b6250204)\
\
Neste repositório, você encontrará: Mapas mentais, dicas e truques, recursos e tudo relacionado à segurança de API e teste de penetração de API. Nossos mapas mentais e recursos são baseados no OWASP TOP 10 API, em nossa experiência em teste de penetração e em outros recursos para fornecer o recurso de segurança de API e teste de penetração mais avançado e preciso na WEB!!
### 🚪 Primeiro portão: `{{Reconhecimento}}`
O primeiro portão para entrar no Império de Segurança de API é saber como obter informações sobre a infraestrutura da API e como realizar uma reconhecimento poderoso na API para extrair as portas ocultas que podem comprometer toda a infraestrutura, portanto, fornecemos este mapa mental atualizado de Reconhecimento de API com as últimas ferramentas e metodologias em reconhecimento de API:
\
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.png)
[**Versão em PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.pdf) **|** [**Versão em XMind**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.xmind)
#### ⚔️ Armas que você precisará:
* [BurpSuite](https://portswigger.net/burp/releases)
* [FFUF](https://github.com/ffuf/ffuf)
* [Arjun](https://github.com/InsiderPhD/Arjun)
* [Postman](https://www.postman.com/downloads/)
* [SecLists](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
* [FuzzDB](https://github.com/fuzzdb-project/fuzzdb)
* [SoapUI](https://www.soapui.org/downloads/soapui/)
* [GraphQL Voyager](https://apis.guru/graphql-voyager/)
* [Kiterunner](https://github.com/assetnote/kiterunner)
* [unfurl](https://github.com/tomnomnom/unfurl)
#### 🏋️ Teste suas habilidades e armas:
* [vapi](https://github.com/roottusk/vapi)
* [Generic-University](https://github.com/InsiderPhD/Generic-University)
### 🚪 Segundo portão: `{{Ataque}}`
#### Atacando RESTful & SOAP:
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.png)\
[**Versão em PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.pdf) **|** [**Versão em XMind**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.xmind)\\
#### Atacando GraphQL:
Devido aos ataques limitados no GraphQL, tentamos gerar todos os possíveis ataques com base em nossa experiência em testar APIs no mapa mental a seguir:
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.png)\
[**Versão em PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.pdf) **|** [**Versão em XMind**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.xmind)\\
## Owasp API Security Top 10
Leia este documento para aprender como **pesquisar** e **explorar** as 10 principais vulnerabilidades de API do Owasp: [https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)
## Lista de verificação de segurança de API
{% embed url="https://github.com/shieldfy/API-Security-Checklist" %}
## Filtros Logger++ para caçar vulnerabilidades de API
[https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)
## Lista de possíveis pontos finais de API
[https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)
## Ferramentas
* [**kiterunner**](https://github.com/assetnote/kiterunner): Ótima ferramenta para **descobrir pontos finais de API.**
2022-09-05 10:17:20 +00:00
```bash
kr scan https://domain.com/api/ -w routes-large.kite -x 20 # Downloaded from kiterunner repo
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
```
* [**automatic-api-attack-tool**](https://github.com/imperva/automatic-api-attack-tool): Ferramenta de ataque API personalizável da Imperva que recebe uma especificação de API como entrada e gera e executa ataques com base nela como saída.
* [**Astra**](https://github.com/flipkart-incubator/Astra): Outra ferramenta para teste de API para encontrar várias vulnerabilidades na web.
2023-06-06 18:56:34 +00:00
* [**Susanoo**](https://github.com/ant4g0nist/Susanoo): Scanner de vulnerabilidades de API.
* [**restler-fuzzer**](https://github.com/microsoft/restler-fuzzer): RESTler é a _primeira ferramenta de fuzzing de API REST com estado_ para testar automaticamente serviços em nuvem por meio de suas APIs REST e encontrar bugs de segurança e confiabilidade nesses serviços. Para um determinado serviço em nuvem com uma especificação OpenAPI/Swagger, o RESTler analisa toda a especificação e, em seguida, gera e executa testes que exercitam o serviço por meio de sua API REST.
* [**TnT-Fuzzer**](https://github.com/Teebytes/TnT-Fuzzer)**:** TnT-Fuzzer é um fuzzer OpenAPI (swagger) escrito em Python.
* [**APIFuzzer**](https://github.com/KissPeter/APIFuzzer)**:** O APIFuzzer lê a descrição da sua API e, passo a passo, fuzzes os campos para validar se a sua aplicação consegue lidar com os parâmetros fuzzed.
2023-06-06 18:56:34 +00:00
* [**API-fuzzer**](https://github.com/Fuzzapi/API-fuzzer): O gem API\_Fuzzer aceita uma solicitação de API como entrada e retorna vulnerabilidades possíveis na API.
* [**race-the-web**](https://github.com/TheHackerDev/race-the-web): Testa condições de corrida em aplicativos da web enviando um número especificado de solicitações para uma URL (ou URLs) de destino _simultaneamente_ e, em seguida, compara as respostas do servidor em busca de unicidade.
2022-04-28 16:01:33 +00:00
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** com facilidade, usando as ferramentas comunitárias mais avançadas do mundo.\
Acesse hoje mesmo:
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
2022-06-06 22:28:05 +00:00
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **versão mais recente do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
2023-06-06 18:56:34 +00:00
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo Telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>