
Scanner multi-thread per rilevare endpoint Swagger/OpenAPI esposti su domini web e sottodomini, con rilevamento automatico di XSS, generazione di PoC e filtro dei falsi positivi per valutazioni di sicurezza delle API.
Presentato al BlackHat Arsenal 2024 (Link)
/swagger-ui/index.htmlAPIDetector v3 richiede Python 3.x e i seguenti pacchetti:
flask # Web framework
requests # Client HTTP
playwright # Automazione browser per screenshot
nest_asyncio # Supporto IO asincrono
Tutte le dipendenze sono elencate in requirements.txt e possono essere installate automaticamente durante la configurazione.
Dopo aver installato i pacchetti richiesti, è necessario installare i browser di Playwright:
python -m playwright install
Questo è necessario affinché la funzionalità di screenshot funzioni correttamente.
git clone https://github.com/brinhosa/apidetector.git
cd apidetector
# Su macOS/Linux:
python3 -m venv venv
source venv/bin/activate
# Su 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
Apri il browser e naviga all'URL mostrato nel terminale.
Utilizzo dell'interfaccia web:
Gli screenshot vengono salvati nella directory screenshots per riferimento futuro.
APIDetector v3 offre due modalità di interazione: una moderna interfaccia web (nuova nella v3) e una tradizionale interfaccia a riga di comando (originale).
python app.py [opzioni]
Opzioni disponibili:
Esempi:
# Esecuzione con impostazioni predefinite (localhost:5000)
python app.py
# Esecuzione su porta personalizzata
python app.py -p 8080
# Consenti accesso esterno
python app.py --host 0.0.0.0
# Esecuzione in modalità debug
python app.py -d
Accedi all'interfaccia web:
Visualizza i Risultati:
Esegui APIDetector tramite la riga di comando. Ecco alcuni esempi di utilizzo:
Utilizzo comune: scansione con 30 thread di un elenco di sottodomini utilizzando un user-agent Chrome e salva i risultati in un file:
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"
Per scansionare un singolo dominio:
python apidetector.py -d example.com
Per scansionare più domini da un file:
python apidetector.py -i input_file.txt
Per specificare un file di output:
python apidetector.py -i input_file.txt -o output_file.txt
Per utilizzare un numero specifico di thread:
python apidetector.py -i input_file.txt -t 20
Per scansionare con entrambi i protocolli HTTP e HTTPS:
python apidetector.py -m -d example.com
Per eseguire lo script in modalità silenziosa (sopprime l'output verbose):
python apidetector.py -q -d example.com
Se stai usando APIDetector v2, sostituisci i comandi con apidetectorv2.py.
-d, --domain: Singolo dominio da testare.-i, --input: File di input contenente i sottodomini da testare.-o, --output: File di output per scrivere gli URL validi.-t, --threads: Numero di thread da utilizzare per la scansione (predefinito: 10).-m, --mixed-mode: Testa entrambi i protocolli HTTP e HTTPS.-q, --quiet: Disabilita l'output verbose (la modalità predefinita è verbose).-ua, --user-agent: Stringa User-Agent personalizzata per le richieste.Esporre endpoint di documentazione Swagger o OpenAPI può presentare vari rischi, principalmente legati alla divulgazione di informazioni. Ecco un elenco ordinato in base ai potenziali livelli di rischio, con endpoint simili raggruppati insieme nelle scansioni di 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'I contributi ad APIDetector sono benvenuti! Sentiti libero di fare un fork del repository, apportare modifiche e inviare pull request. Un ringraziamento speciale ai membri contributori che hanno aiutato con i test e i suggerimenti per le funzionalità:
Lo strumento APIDetector è strettamente destinato esclusivamente a scopi di test e formativi. Gli sviluppatori di APIDetector non si assumono alcuna responsabilità e declinano ogni responsabilità per qualsiasi uso improprio, conseguenze non intenzionali o danni causati dall'uso di questo strumento. Qualsiasi uso non autorizzato, illegale o comunque dannoso di APIDetector è espressamente vietato. L'utente finale si assume la piena responsabilità di garantire la conformità con tutte le leggi locali, statali, federali e internazionali pertinenti. Utilizzando questo strumento, l'utente riconosce di possedere le autorizzazioni necessarie per testare le reti o i sistemi che intende scansionare e accetta di manlevare gli sviluppatori da qualsiasi rivendicazione derivante dal suo utilizzo. L'utente finale è l'unico responsabile di garantire che l'uso di questo strumento non violi alcuna restrizione legale o termini di servizio che governano le reti o i sistemi sottoposti a test.
Disclaimer: Utilizzo dello Strumento APIDetector Lo strumento APIDetector è progettato esclusivamente per scopi leciti di test e formazione. Viene fornito "così com'è" senza garanzie di alcun tipo, esplicite o implicite. Gli sviluppatori e distributori di APIDetector declinano espressamente qualsiasi responsabilità per uso improprio, conseguenze non intenzionali o danni derivanti dall'uso di questo strumento. Avviso Legale Importante: L'uso non autorizzato, illegale o non etico di APIDetector è severamente vietato. Gli utenti sono gli unici responsabili di rispettare tutte le leggi locali, statali, federali e internazionali applicabili, nonché eventuali termini di servizio che governano le reti o i sistemi con cui interagiscono. Utilizzando APIDetector, gli utenti affermano di possedere le autorizzazioni necessarie per testare le reti o i sistemi target. Assunzione di Rischio e Manleva: Scaricando, installando o utilizzando APIDetector, l'utente si assume la piena responsabilità di qualsiasi ripercussione legale associata al suo utilizzo. Gli sviluppatori e distributori di APIDetector non saranno ritenuti responsabili per conseguenze legali, danni o rivendicazioni di terzi derivanti dal suo utilizzo. Gli utenti accettano di manlevare e tenere indenni gli sviluppatori e i distributori da qualsiasi rivendicazione, spesa legale o responsabilità associata alle loro azioni.
Questo progetto è concesso in licenza sotto la Licenza MIT.
| Opzione | Descrizione | Predefinito |
|---|
-p, --port | Numero della porta | 5000 |
--host | Indirizzo host | 127.0.0.1 |
-d, --debug | Abilita modalità debug | False |
Per eseguire lo script con un user-agent personalizzato:
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'