
Scanner de múltiplas threads para detectar endpoints Swagger/OpenAPI expostos em domínios e subdomínios web, com detecção automática de XSS, geração de PoC e filtragem de falsos positivos para avaliações de segurança de API.
Apresentado no BlackHat Arsenal 2024 (Link)
/swagger-ui/index.htmlAPIDetector v3 requer Python 3.x e os seguintes pacotes:
flask # Framework web
requests # Cliente HTTP
playwright # Automação de navegador para screenshots
nest_asyncio # Suporte a IO assíncrono
Todas as dependências estão listadas em requirements.txt e podem ser instaladas automaticamente durante a configuração.
Após instalar os pacotes necessários, você precisa instalar os navegadores do Playwright:
python -m playwright install
Isso é necessário para que a funcionalidade de screenshot funcione corretamente.
git clone https://github.com/brinhosa/apidetector.git
cd apidetector
# No macOS/Linux:
python3 -m venv venv
source venv/bin/activate
# No Windows:
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
playwright install
python app.py
python app.py --port 8080 --host 0.0.0.0
Abra seu navegador e navegue até a URL mostrada no terminal.
Usando a interface web:
Os screenshots são salvos no diretório screenshots para referência futura.
APIDetector v3 oferece duas formas de interagir com a ferramenta: uma interface web moderna (nova na v3) e uma interface de linha de comando tradicional (original).
python app.py [opções]
Opções disponíveis:
| Opção | Descrição | Padrão |
|---|---|---|
-p, --port | Número da porta | 5000 |
--host | Endereço do host | 127.0.0.1 |
-d, --debug | Ativar modo debug | False |
Exemplos:
# Executar com configurações padrão (localhost:5000)
python app.py
# Executar em porta personalizada
python app.py -p 8080
# Permitir acesso externo
python app.py --host 0.0.0.0
# Executar em modo debug
python app.py -d
Acesse a interface web:
Veja os Resultados:
Execute o APIDetector usando a linha de comando. Aqui estão alguns exemplos de uso:
Uso comum, varredura com 30 threads de uma lista de subdomínios usando um user-agent Chrome e salvar os resultados em um arquivo:
python apidetector.py -i lista_de_subdominios_da_empresa.txt -o arquivo_resultados.txt -t 30 -ua "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
Para varrer um único domínio:
python apidetector.py -d example.com
Para varrer múltiplos domínios a partir de um arquivo:
python apidetector.py -i arquivo_entrada.txt
Para especificar um arquivo de saída:
python apidetector.py -i arquivo_entrada.txt -o arquivo_saida.txt
Para usar um número específico de threads:
python apidetector.py -i arquivo_entrada.txt -t 20
Para varrer com ambos os protocolos HTTP e HTTPS:
python apidetector.py -m -d example.com
Para executar o script em modo silencioso (suprimir saída detalhada):
python apidetector.py -q -d example.com
Para executar o script com um user-agent personalizado:
python apidetector.py -d example.com -ua "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
Se você está usando APIDetector v2, substitua os comandos por apidetectorv2.py.
-d, --domain: Domínio único a ser testado.-i, --input: Arquivo de entrada contendo subdomínios a serem testados.-o, --output: Arquivo de saída para escrever URLs válidas.-t, --threads: Número de threads a serem usadas na varredura (padrão é 10).-m, --mixed-mode: Testar ambos os protocolos HTTP e HTTPS.-q, --quiet: Desabilitar saída detalhada (modo padrão é detalhado).-ua, --user-agent: String User-Agent personalizada para requisições.