
Scanner multi-threadé pour la détection d'endpoints Swagger/OpenAPI exposés sur des domaines et sous-domaines web, avec détection automatique de XSS, génération de PoC et filtrage des faux positifs pour les évaluations de sécurité d'API.
Présenté au BlackHat Arsenal 2024 (Lien)
/swagger-ui/index.htmlAPIDetector v3 nécessite Python 3.x et les paquets suivants :
flask # Framework web
requests # Client HTTP
playwright # Automatisation du navigateur pour les captures d'écran
nest_asyncio # Support async IO
Toutes les dépendances sont listées dans requirements.txt et peuvent être installées automatiquement lors de la configuration.
Après avoir installé les paquets requis, vous devez installer les navigateurs Playwright :
python -m playwright install
Ceci est nécessaire pour le bon fonctionnement de la fonctionnalité de capture d'écran.
git clone https://github.com/brinhosa/apidetector.git
cd apidetector
# Sur macOS/Linux :
python3 -m venv venv
source venv/bin/activate
# Sur 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
Ouvrez votre navigateur et accédez à l'URL affichée dans le terminal.
Utilisation de l'interface web :
Les captures d'écran sont enregistrées dans le répertoire screenshots pour référence ultérieure.
APIDetector v3 offre deux façons d'interagir avec l'outil : une interface web moderne (nouveauté de la v3) et une interface en ligne de commande traditionnelle (originale).
python app.py [options]
Options disponibles :
Exemples :
# Exécution avec les paramètres par défaut (localhost:5000)
python app.py
# Exécution sur un port personnalisé
python app.py -p 8080
# Autoriser l'accès externe
python app.py --host 0.0.0.0
# Exécution en mode débogage
python app.py -d
Accédez à l'interface web :
Visualisez les résultats :
Exécutez APIDetector en ligne de commande. Voici quelques exemples d'utilisation :
Usage courant : scanner une liste de sous-domaines avec 30 threads en utilisant un user-agent Chrome et enregistrer les résultats dans un fichier :
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"
Pour scanner un seul domaine :
python apidetector.py -d example.com
Pour scanner plusieurs domaines à partir d'un fichier :
python apidetector.py -i input_file.txt
Pour spécifier un fichier de sortie :
python apidetector.py -i input_file.txt -o output_file.txt
Pour utiliser un nombre spécifique de threads :
python apidetector.py -i input_file.txt -t 20
Pour scanner avec les deux protocoles HTTP et HTTPS :
python apidetector.py -m -d example.com
Pour exécuter le script en mode silencieux (supprimer la sortie verbose) :
python apidetector.py -q -d example.com
Si vous utilisez APIDetector v2, remplacez les commandes par apidetectorv2.py.
-d, --domain : Domaine unique à tester.-i, --input : Fichier d'entrée contenant les sous-domaines à tester.-o, --output : Fichier de sortie pour écrire les URL valides.-t, --threads : Nombre de threads à utiliser pour le scan (défaut : 10).-m, --mixed-mode : Tester les protocoles HTTP et HTTPS.-q, --quiet : Désactiver la sortie verbose (mode par défaut : verbose).-ua, --user-agent : Chaîne User-Agent personnalisée pour les requêtes.Exposer des points d'accès de documentation Swagger ou OpenAPI peut présenter divers risques, principalement liés à la divulgation d'informations. Voici une liste ordonnée basée sur les niveaux de risque potentiels, avec des points d'accès similaires regroupés pour le scan 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'Les contributions à APIDetector sont les bienvenues ! N'hésitez pas à forker le dépôt, à apporter des modifications et à soumettre des pull requests. Un grand merci aux membres contributeurs qui ont aidé avec les tests et les suggestions de fonctionnalités :
L'outil APIDetector est strictement destiné à des fins de test et d'éducation uniquement. Les développeurs d'APIDetector déclinent toute responsabilité et ne sauraient être tenus responsables de toute utilisation abusive, conséquences imprévues ou dommages causés par l'utilisation de cet outil. Toute utilisation non autorisée, illégale ou autrement nuisible d'APIDetector est expressément interdite. L'utilisateur final assume l'entière responsabilité de se conformer à toutes les lois locales, étatiques, fédérales et internationales applicables. En utilisant cet outil, l'utilisateur reconnaît détenir les autorisations nécessaires pour tester les réseaux ou systèmes qu'il a l'intention de scanner et accepte d'indemniser les développeurs contre toute réclamation découlant de son utilisation. L'utilisateur final est seul responsable de s'assurer que son utilisation de cet outil ne viole aucune restriction légale ni condition d'utilisation des réseaux ou systèmes testés.
Avis de non-responsabilité : Utilisation de l'outil APIDetector L'outil APIDetector est conçu exclusivement pour des tests légitimes et des fins éducatives. Il est fourni "en l'état" sans garantie d'aucune sorte, expresse ou implicite. Les développeurs et distributeurs d'APIDetector déclinent expressément toute responsabilité pour une utilisation abusive, des conséquences imprévues ou des dommages résultant de l'utilisation de cet outil. Avis légal important : Toute utilisation non autorisée, illégale ou contraire à l'éthique d'APIDetector est strictement interdite. Les utilisateurs sont seuls responsables du respect de toutes les lois locales, étatiques, fédérales et internationales applicables, ainsi que de toute condition d'utilisation régissant les réseaux ou systèmes avec lesquels ils interagissent. En utilisant APIDetector, les utilisateurs confirment qu'ils possèdent les autorisations nécessaires pour tester les réseaux ou systèmes ciblés. Assomption de risque et indemnisation : En téléchargeant, installant ou utilisant APIDetector, l'utilisateur assume l'entière responsabilité de toute répercussion juridique associée à son utilisation. Les développeurs et distributeurs d'APIDetector ne sauraient être tenus responsables de toute conséquence juridique, dommage ou réclamation de tiers découlant de son utilisation. Les utilisateurs acceptent d'indemniser et de dégager de toute responsabilité les développeurs et distributeurs contre toute réclamation, frais juridiques ou responsabilités associés à leurs actions.
Ce projet est sous licence MIT License.
| Option | Description | Défaut |
|---|
-p, --port | Numéro de port | 5000 |
--host | Adresse de l'hôte | 127.0.0.1 |
-d, --debug | Activer le mode débogage | False |
Pour exécuter le script avec un user-agent personnalisé :
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'