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:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo do telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub HackTricks e HackTricks Cloud.
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:
- Serviços Web (SOAP/XML)
- A documentação usa o formato WSDL e geralmente é salva no caminho
?wsdl
comohttps://api.example.com/api/?wsdl
- Um exemplo desta documentação pode ser encontrado em http://www.dneonline.com/calculator.asmx (documento WSDL em 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 - 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/. No entanto, existem outros motores de representação de API mais amigáveis para desenvolvedores como 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
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:
⚔️ Armas que você precisará:
🏋️ Teste suas habilidades e armas:
🚪 Segundo portão: {{Atacando}}
Atacando RESTful & SOAP:
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:
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:
- Se você quer ver a sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios github HackTricks e HackTricks Cloud.