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

16 KiB

Pentesting de Web API

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Use Trickest para construir e automatizar fluxos de trabalho com as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Informações Básicas

Principal:

Laboratórios

  • 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, 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)

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 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 em vítimas autenticadas.

Padrões

Procure por padrões de API dentro da API e tente usá-los para descobrir mais informações.
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 endpoints diferentes 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 fornece 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.

Se você enviar dados POST regulares, 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 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>

Verificar possíveis versões (abordagem automatizada)

Extensão AutoRepeater do 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)

🛡️ API Security Empire Cheat Sheet


Autor do Cheat Sheet: Momen Eldawakhly (Cyber Guy)

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 teste de penetração e 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, então, fornecemos este mapa mental atualizado de Reconhecimento de API com as últimas ferramentas e metodologias em reconhecimento de API:


Versão em PDF | Versão em XMind

⚔️ Armas que você precisará:

🏋️ Teste suas habilidades e armas:

🚪 Segundo portão: {{Ataque}}

Atacando RESTful & SOAP:


Versão em PDF | Versão em 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 próximo mapa mental:


Versão em PDF | Versão em 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

Lista de verificação de segurança da 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

Lista de possíveis endpoints de API

https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d

Ferramentas

  • kiterunner: Ótima ferramenta para descobrir endpoints de API.
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: 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: Outra ferramenta para teste de API para encontrar várias vulnerabilidades na web.
  • Susanoo: Scanner de vulnerabilidades de API.
  • 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: TnT-Fuzzer é um fuzzer OpenAPI (swagger) escrito em Python.
  • 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.
  • API-fuzzer: O gem API_Fuzzer aceita uma solicitação de API como entrada e retorna vulnerabilidades possíveis na API.
  • 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.

Use Trickest para construir 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" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥