
Un potente strumento di brute force sulle directory, pensato per operazioni ricorsive/multiplex, scoperta ed enumerazione di API, scraping di file JS e elenco dei metodi HTTP delle API, in un unico comando. Non è SOLO per API, il mio strumento eccelle semplicemente in esse.
Un potente strumento di brute-force sulle directory progettato per la ricognizione di API e il penetration testing. Scopre automaticamente endpoint API nascosti, esegue sottoscansioni ricorsive e sonda i metodi HTTP per un'enumerazione API più approfondita.
✨ Funzionalità principali:
requeststmux (opzionale, per il flag --split)xfce-terminal (per ambienti desktop Linux)# Clona il repository
git clone https://github.com/austinjump-sec/API-SPY.git
cd API-SPY
# Installa le dipendenze
pip install requests
# Rendi eseguibili gli script (opzionale)
chmod +x apispy.py apiprobe.py
python3 apispy.py <baseUrl> <wordlist> [OPZIONI]
| Argomento | Descrizione |
|---|---|
<baseUrl> | URL di destinazione (es., http://example.com o http://api.example.com) |
<wordlist> | Percorso del file wordlist contenente gli endpoint (uno per riga) |
| Argomento | Descrizione |
|---|---|
--t<numero> | Numero di thread (max 150, predefinito: 1) |
--split | Usa tmux split-window invece di nuove finestre di terminale |
--debug | Mostra messaggi di errore altrimenti nascosti |
--loud | Mostra tutti i messaggi, positivi ed errori, evidenziando quelli che non restituiscono 404 |
--js | Cerca file JavaScript ed estrae da quelli trovati eventuali endpoint API comuni hardcoded |
python3 apispy.py http://api.example.com wordlist.txt
python3 apispy.py http://api.example.com wordlist.txt -t10
python3 apispy.py http://api.example.com wordlist.txt -t5 --split
python3 apispy.py http://api.example.com/v1 wordlist.txt -t20
Lo strumento inizia testando un insieme predefinito di percorsi API comuni:
api, v1, v2, api/v1, api/v2, graphql, rest#)200, 401, 403Quando viene trovato un endpoint, viene visualizzato un prompt:
'-> Sottoscansionare <url>? (y/n) [Salto automatico in 5s]:
y/yes per scansionare ricorsivamente quell'endpoint con la stessa wordlistDopo la sottoscansione, viene visualizzato un prompt:
'-> Sondare i metodi su <url>? (y/n) [Salto automatico in 5s]:
apiprobe.py che testa i metodi HTTP sull'endpoint scopertoAllow[+] Url trovato: http://api.example.com/v1 ← 200 OK (accessibile)
'-> Sottoscansionare http://api.example.com/v1? (y/n) [Salto automatico in 0s]:
[-] Timeout: Prompt saltato per http://api.example.com/v1?
'-> Sondare i metodi su http://api.example.com/v1? (y/n) [Salto automatico in 4s]:
[-] Url trovato ma non consentito (403 ERR): ... ← Vietato ma esistente
[-] Url trovato ma non consentito (401 ERR): ... ← Richiede autenticazione
[+] GET -> STATUS: 200 OK (Dimensione: 1024)
[-] POST -> STATUS: 405 (Dimensione: 0)
[Suggerimento Intestazione] Allow: GET, HEAD, OPTIONS
Crea un semplice file di testo con gli endpoint (uno per riga):
admin
users
api/users
v1/products
v2/customers
/api/v1/auth
/graphql
search
data
config
Nota: Le righe che iniziano con # sono trattate come commenti e ignorate.
Wordlist API popolari da usare con API-SPY:
# Modalità furtiva (pochi thread)
python3 apispy.py http://target.com wordlist.txt -t3
# Modalità bilanciata
python3 apispy.py http://target.com wordlist.txt -t15
# Modalità aggressiva
python3 apispy.py http://target.com wordlist.txt -t50
timeout=5 nel codice sorgente per personalizzarloAssicurati che il percorso della wordlist sia corretto e che il file esista:
ls -la /path/to/wordlist.txt
Quando esegui la sottoscansione, assicurati che:
apispy.pyapiprobe.pySe --split fallisce:
sudo apt install tmuxtmux new-session -s scancurl http://tuo-url/check_status()