
Escáner multi-hilo para detectar endpoints Swagger/OpenAPI expuestos en dominios y subdominios web, con detección automática de XSS, generación de PoC y filtrado de falsos positivos para evaluaciones de seguridad en APIs.
Presentado en BlackHat Arsenal 2024 (Enlace)
/swagger-ui/index.htmlAPIDetector v3 requiere Python 3.x y los siguientes paquetes:
flask # Framework web
requests # Cliente HTTP
playwright # Automatización del navegador para capturas de pantalla
nest_asyncio # Soporte de E/S asíncrona
Todas las dependencias están listadas en requirements.txt y se pueden instalar automáticamente durante la configuración.
Después de instalar los paquetes requeridos, necesitas instalar los navegadores de Playwright:
python -m playwright install
Esto es necesario para que la funcionalidad de captura de pantalla funcione correctamente.
git clone https://github.com/brinhosa/apidetector.git
cd apidetector
# En macOS/Linux:
python3 -m venv venv
source venv/bin/activate
# En 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
Abre tu navegador y navega a la URL mostrada en la terminal.
Usando la interfaz web:
Las capturas de pantalla se guardan en el directorio screenshots para referencia futura.
APIDetector v3 ofrece dos formas de interactuar con la herramienta: una interfaz web moderna (nueva en v3) y una interfaz de línea de comandos tradicional (original).
python app.py [opciones]
Opciones disponibles:
| Opción | Descripción | Predeterminado |
|---|---|---|
-p, --port | Número de puerto | 5000 |
--host | Dirección del host | 127.0.0.1 |
-d, --debug | Habilita el modo de depuración | False |
Ejemplos:
# Ejecutar con configuración predeterminada (localhost:5000)
python app.py
# Ejecutar en puerto personalizado
python app.py -p 8080
# Permitir acceso externo
python app.py --host 0.0.0.0
# Ejecutar en modo de depuración
python app.py -d
Accede a la interfaz web:
Ver resultados:
Ejecuta APIDetector usando la línea de comandos. Aquí hay algunos ejemplos de uso:
Uso común, escanea con 30 hilos una lista de subdominios usando un user-agent de Chrome y guarda los resultados en un archivo:
python apidetector.py -i list_of_company_subdomains.txt -o results_file.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 escanear un solo dominio:
python apidetector.py -d example.com
Para escanear múltiples dominios desde un archivo:
python apidetector.py -i input_file.txt
Para especificar un archivo de salida:
python apidetector.py -i input_file.txt -o output_file.txt
Para usar un número específico de hilos:
python apidetector.py -i input_file.txt -t 20
Para escanear con ambos protocolos HTTP y HTTPS:
python apidetector.py -m -d example.com
Para ejecutar el script en modo silencioso (suprimir salida verbosa):
python apidetector.py -q -d example.com
Para ejecutar el script con un 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"
Si estás usando APIDetector v2, reemplaza los comandos por apidetectorv2.py.