
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:
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
Si estás usando APIDetector v2, reemplaza los comandos por apidetectorv2.py.
-d, --domain: Dominio único a probar.-i, --input: Archivo de entrada que contiene subdominios a probar.-o, --output: Archivo de salida para escribir las URLs válidas.-t, --threads: Número de hilos a usar para el escaneo (predeterminado es 10).-m, --mixed-mode: Prueba ambos protocolos HTTP y HTTPS.-q, --quiet: Deshabilita la salida verbosa (el modo predeterminado es verboso).-ua, --user-agent: Cadena de User-Agent personalizada para las solicitudes.Exponer endpoints de documentación de Swagger o OpenAPI puede presentar varios riesgos, principalmente relacionados con la divulgación de información. Aquí hay una lista ordenada basada en niveles de riesgo potencial, con endpoints similares agrupados que escanea APIDetector:
'/swagger-ui.html', '/swagger-ui/', '/swagger-ui/index.html', '/api/swagger-ui.html', '/documentation/swagger-ui.html', '/swagger/index.html', '/api/docs', '/docs', '/api/swagger-ui', '/documentation/swagger-ui''/openapi.json', '/swagger.json', '/api/swagger.json', '/swagger.yaml', '/swagger.yml', '/api/swagger.yaml', '/api/swagger.yml', '/api.json', '/api.yaml', '/api.yml', '/documentation/swagger.json', '/documentation/swagger.yaml', '/documentation/swagger.yml''/v2/api-docs', '/v3/api-docs', '/api/v2/swagger.json', '/api/v3/swagger.json', '/api/v1/documentation', '/api/v2/documentation', '/api/v3/documentation', '/api/v1/api-docs', '/api/v2/api-docs', '/api/v3/api-docs', '/swagger/v2/api-docs', '/swagger/v3/api-docs', '/swagger-ui.html/v2/api-docs', '/swagger-ui.html/v3/api-docs', , '/swagger-resources', '/swagger-resources/configuration/ui', '/swagger-resources/configuration/security', '/api/swagger-resources', '/api.html'¡Las contribuciones a APIDetector son bienvenidas! Siéntete libre de bifurcar el repositorio, hacer cambios y enviar solicitudes de extracción. Agradecimientos especiales a los miembros contribuyentes que ayudaron con pruebas y sugerencias de funciones:
La herramienta APIDetector está destinada estrictamente solo para fines de prueba y educativos. Los desarrolladores de APIDetector no asumen ninguna responsabilidad y rechazan toda responsabilidad por cualquier mal uso, consecuencias no deseadas o daños causados por el uso de esta herramienta. Cualquier uso no autorizado, ilegal o dañino de APIDetector está expresamente prohibido. El usuario final asume la responsabilidad total de garantizar el cumplimiento de todas las leyes locales, estatales, federales e internacionales pertinentes. Al usar esta herramienta, el usuario reconoce que posee las autorizaciones necesarias para probar las redes o sistemas que pretende escanear y acepta indemnizar a los desarrolladores contra cualquier reclamo que surja de su uso. El usuario final es el único responsable de garantizar que su uso de esta herramienta no viole ninguna restricción legal o términos de servicio que rigen las redes o sistemas bajo prueba.
Aviso: Uso de la Herramienta APIDetector La herramienta APIDetector está diseñada exclusivamente para fines de prueba y educativos legales. Se proporciona "tal cual" sin garantías de ningún tipo, expresas o implícitas. Los desarrolladores y distribuidores de APIDetector renuncian expresamente a cualquier responsabilidad por mal uso, consecuencias no deseadas o daños resultantes del uso de esta herramienta. Aviso legal importante: El uso no autorizado, ilegal o no ético de APIDetector está estrictamente prohibido. Los usuarios son los únicos responsables de cumplir con todas las leyes locales, estatales, federales e internacionales aplicables, así como con cualquier término de servicio que rige las redes o sistemas con los que interactúan. Al usar APIDetector, los usuarios afirman que poseen las autorizaciones necesarias para probar las redes o sistemas objetivo. Asunción de riesgo e indemnización: Al descargar, instalar o usar APIDetector, el usuario asume la responsabilidad total de cualquier repercusión legal asociada con su uso. Los desarrolladores y distribuidores de APIDetector no serán responsables de ninguna consecuencia legal, daño o reclamo de terceros que surja de su uso. Los usuarios aceptan indemnizar y eximir de responsabilidad a los desarrolladores y distribuidores contra cualquier reclamo, honorarios legales o responsabilidades asociados con sus acciones.
Este proyecto está licenciado bajo la Licencia MIT.
| 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 |
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"
'/api/swagger/v2/api-docs''/api/swagger/v3/api-docs'