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

14 KiB

Teste de Penetração em API Web

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Use Trickest 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:

Laboratórios

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

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 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 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 de acordo 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.

Se você enviar dados regulares via 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 mais alta)
  • Substituição: v1 (versão mais baixa)

🛡️ Folha de Dicas do Império da Segurança de API


Autor da Folha de Dicas: 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 TOP 10 da OWASP para 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 atualizado de Recon de API com as ferramentas e metodologias mais recentes em recon de API:


Versão em PDF | Versão XMind

⚔️ Armas que você precisará:

🏋️ Teste suas habilidades e armas:

🚪 Segundo portão: {{Atacando}}

Atacando RESTful & SOAP:


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


Versão em PDF | Versão XMind\

Top 10 de Segurança de API da Owasp

Leia este documento para aprender como procurar e explorar vulnerabilidades da Owasp Top 10 para APIs: 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

Lista de possíveis endpoints de API

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

Ferramentas

  • kiterunner: Ferramenta excelente 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 recebe uma especificação de API como entrada, gera e executa ataques baseados nela como saída.
  • Astra: Outra ferramenta para teste de API para encontrar várias vulnerabilidades web diferentes.
  • Susanoo: Scanner de vulnerabilidade API.
  • restler-fuzzer: RESTler é a primeira ferramenta de fuzzing REST API com estado para testar automaticamente serviços em nuvem através de suas REST APIs 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 REST API.
  • TnT-Fuzzer: TnT-Fuzzer é um fuzzer OpenAPI (swagger) escrito em python.
  • 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: A gema 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 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.

Use Trickest para construir e automatizar fluxos de trabalho com facilidade, alimentados pelas ferramentas comunitárias mais avançadas.
Obtenha Acesso Hoje:

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

Aprenda AWS hacking do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: