mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-25 04:23:33 +00:00
244 lines
14 KiB
Markdown
244 lines
14 KiB
Markdown
# Teste de Penetração em API Web
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras formas de apoiar o HackTricks:
|
|
|
|
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
|
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
|
|
|
|
</details>
|
|
|
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
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.\
|
|
Obtenha Acesso Hoje:
|
|
|
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
|
|
|
## Informações Básicas
|
|
|
|
Principais:
|
|
|
|
* **Serviços Web (SOAP/XML)**
|
|
* A documentação utiliza o formato **WSDL** e geralmente é salva no caminho `?wsdl` como `https://api.example.com/api/?wsdl`
|
|
* Um exemplo desta 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 outros motores de representação de API mais amigáveis para desenvolvedores como [https://swagger.io/tools/swagger-ui/](https://swagger.io/tools/swagger-ui/) (confira 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 top 10 da OWASP para APIs.
|
|
|
|
## Truques
|
|
|
|
### SOAP/XML
|
|
|
|
Esses tipos de APIs podem ser [**vulneráveis a XXE**](../../pentesting-web/xxe-xee-xml-external-entity.md), mas geralmente **Declarações DTD** são **proibidas** na entrada do usuário.
|
|
|
|
Você também pode tentar usar tags CDATA para inserir cargas úteis (desde que o XML seja válido)
|
|
|
|
![](<../../.gitbook/assets/image (534).png>)
|
|
|
|
### Verificar Acesso
|
|
|
|
Geralmente, alguns endpoints de 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 de [**CORS**](../../pentesting-web/cors-bypass.md) da API, pois se ela permitir o envio de solicitações com as credenciais do domínio do atacante, muitos danos podem ser causados via [**CSRF**](../../pentesting-web/csrf-cross-site-request-forgery.md) de vítimas autenticadas.
|
|
|
|
### Padrões
|
|
|
|
Procure por padrões na 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 dar 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 diferentes endpoints para tentar acessar outras informações
|
|
|
|
Por exemplo, se você ver algo como: _/api/albums?**album\_id=\<album id>**_
|
|
|
|
Você poderia **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=\<your account id>** → /api/account?**id=\<your account id>\&id=\<admin's account id>**
|
|
|
|
### Parâmetro curinga
|
|
|
|
Tente usar os seguintes símbolos como curingas: **\***, **%**, **\_**, **.**
|
|
|
|
* /api/users/\*
|
|
* /api/users/%
|
|
* /api/users/\_
|
|
* /api/users/.
|
|
|
|
### Mudança de método de solicitação HTTP
|
|
|
|
Você pode tentar usar os métodos HTTP: **GET, POST, PUT, DELETE, PATCH, INVENTED** para verificar se o servidor web fornece informações inesperadas com eles.
|
|
|
|
### Tipo de conteúdo da solicitação
|
|
|
|
Tente alternar entre os seguintes tipos de conteúdo (modificando adequadamente o corpo da solicitação) para fazer o servidor web se comportar de maneira inesperada:
|
|
|
|
* **x-www-form-urlencoded** --> user=test
|
|
* **application/xml** --> \<user>test\</user>
|
|
* **application/json** --> {"user": "test"}
|
|
|
|
### Tipos de parâmetros
|
|
|
|
Se dados em **JSON** estão 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 em **XML**, verifique injeções de [XXE](../../pentesting-web/xxe-xee-xml-external-entity.md).
|
|
|
|
Se você enviar dados regulares de POST, tente enviar arrays e dicionários:
|
|
|
|
* username\[]=John
|
|
* username\[$neq]=lalala
|
|
|
|
### Brincar com rotas
|
|
|
|
`/files/..%2f..%2f + ID da vítima + %2f + nome do arquivo da vítima`
|
|
|
|
### Verificar possíveis versões
|
|
|
|
Versões antigas podem ainda 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>`
|
|
|
|
### Verificar possíveis versões (abordagem automatizada)
|
|
|
|
Extensão AutoRepeater do Burp: Adicione uma regra de substituição
|
|
|
|
* `Tipo: String de Solicitação`
|
|
* `Correspondência: v2 (versão superior)`
|
|
* `Substituição: v1 (versão inferior)`
|
|
|
|
## 🛡️ 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, nossa experiência em Testes de Penetração e outros recursos para entregar o recurso de segurança e teste de penetração de API mais avançado e preciso na WEB!!
|
|
|
|
### 🚪 Primeiro portão: `{{Recon}}`
|
|
|
|
O primeiro portão para entrar no Império da Segurança de API é saber como coletar informações sobre a infraestrutura da API e como realizar um recon poderoso na API para extrair as portas ocultas que podem comprometer toda a infraestrutura, então, fornecemos este mapa mental de recon de API atualizado com as últimas ferramentas e metodologias em recon 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 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: `{{Atacando}}`
|
|
|
|
#### 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 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 ataques possíveis devido à nossa experiência em testar APIs no seguinte mapa mental:
|
|
|
|
![](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 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 **procurar** e **explorar** vulnerabilidades da Owasp Top 10 API: [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ça a Vulnerabilidades de API
|
|
|
|
[https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)
|
|
|
|
## Lista de possíveis endpoints de API
|
|
|
|
[https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)
|
|
|
|
## Ferramentas
|
|
|
|
* [**kiterunner**](https://github.com/assetnote/kiterunner): Ferramenta excelente para **descobrir endpoints de API.**
|
|
```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, gera e executa ataques baseados nela como saída.
|
|
* [**Astra**](https://github.com/flipkart-incubator/Astra): Outra ferramenta para teste de API para encontrar várias vulnerabilidades web diferentes.
|
|
* [**Susanoo**](https://github.com/ant4g0nist/Susanoo): Scanner de vulnerabilidade 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 através de suas APIs REST e encontrar bugs de segurança e confiabilidade nesses serviços. Para um dado serviço em nuvem com uma especificação OpenAPI/Swagger, RESTler analisa toda a especificação e, em seguida, gera e executa testes que exercitam o serviço através 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)**:** APIFuzzer lê a descrição da sua API e passo a passo faz fuzzing dos campos para validar se a sua aplicação pode lidar com os parâmetros fuzzados.
|
|
* [**API-fuzzer**](https://github.com/Fuzzapi/API-fuzzer): A gema 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 aplicações web enviando um número especificado pelo usuário de solicitações para uma URL alvo (ou URLs) _simultaneamente_, e depois compara as respostas do servidor para unicidade.
|
|
|
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Use [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir e **automatizar fluxos de trabalho** com facilidade, alimentados pelas ferramentas comunitárias **mais avançadas** do mundo.\
|
|
Obtenha Acesso Hoje:
|
|
|
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda AWS hacking do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras formas de apoiar o HackTricks:
|
|
|
|
* Se você quer ver a sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
|
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|