
Una potente herramienta de fuerza bruta de directorios diseñada para operaciones recursivas/multiplex, descubrimiento y enumeración de API, extracción de archivos JS y listado de métodos HTTP de API, en un solo comando. Esto no es SOLO para API, mi herramienta simplemente sobresale en ellas.
Una potente herramienta de fuerza bruta de directorios diseñada para el reconocimiento de API y pruebas de penetración. Descubre automáticamente endpoints API ocultos, realiza subescaneos recursivos y sondea métodos HTTP para una enumeración de API más profunda.
✨ Capacidades principales:
requeststmux (opcional, para la opción --split)xfce-terminal (para entornos de escritorio Linux)# Clone the repository
git clone https://github.com/austinjump-sec/API-SPY.git
cd API-SPY
# Install dependencies
pip install requests
# Make scripts executable (optional)
chmod +x apispy.py apiprobe.py
python3 apispy.py <baseUrl> <wordlist> [OPCIONES]
| Argumento | Descripción |
|---|---|
<baseUrl> | URL objetivo (p. ej., http://example.com o http://api.example.com) |
<wordlist> | Ruta al archivo de wordlist que contiene los endpoints (uno por línea) |
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
La herramienta comienza probando un conjunto predefinido de rutas API comunes:
api, v1, v2, api/v1, api/v2, graphql, rest#)200, 401, 403Cuando se encuentra un endpoint, se te solicita:
'-> Subscan <url>? (y/n) [Auto-skip in 5s]:
y/yes para escanear recursivamente ese endpoint con la misma wordlistDespués del subescaneo, se te solicita:
'-> Probe methods on <url>? (y/n) [Auto-skip in 5s]:
apiprobe.py, que prueba los métodos HTTP en el endpoint descubiertoAllow[+] Url found: http://api.example.com/v1 ← 200 OK (accessible)
'-> Subscan http://api.example.com/v1? (y/n) [Auto-skip in 0s]:
[-] Timeout: Skipped prompt for http://api.example.com/v1?
'-> Probe methods on http://api.example.com/v1? (y/n) [Auto-skip in 4s]:
[-] Url found but not permitted (403 ERR): ... ← Forbidden but exists
[-] Url found but not permitted (401 ERR): ... ← Requires authentication
[+] GET -> STATUS: 200 OK (Size: 1024)
[-] POST -> STATUS: 405 (Size: 0)
[Header Hint] Allow: GET, HEAD, OPTIONS
Crea un archivo de texto simple con endpoints (uno por línea):
admin
users
api/users
v1/products
v2/customers
/api/v1/auth
/graphql
search
data
config
Nota: Las líneas que comienzan con # se tratan como comentarios y se ignoran.
Wordlists de API populares para usar con API-SPY:
# Stealth mode (low threads)
python3 apispy.py http://target.com wordlist.txt -t3
# Balanced mode
python3 apispy.py http://target.com wordlist.txt -t15
# Aggressive mode
python3 apispy.py http://target.com wordlist.txt -t50
timeout=5 en el código fuente para personalizarloAsegúrate de que la ruta de la wordlist sea correcta y de que el archivo exista:
ls -la /path/to/wordlist.txt
Al hacer subescaneo, asegúrate de:
apispy.pyapiprobe.pySi --split falla:
sudo apt install tmuxtmux new-session -s scancurl http://your-url/check_status()⚠️ Legal y ético:
Edita el código fuente para ajustar los valores de tiempo de espera:
def ask_subscan(url, wordlist, timeout=10): # Change from 5 to 10 seconds
Crea wordlists dirigidas a rutas API específicas:
# Admin endpoints only
grep -i "admin" full-wordlist.txt > admin-wordlist.txt
# v1 API only
grep "v1" full-wordlist.txt > v1-wordlist.txt
Escanea varios objetivos con un bucle:
for target in http://target1.com http://target2.com http://target3.com; do
python3 apispy.py "$target" wordlist.txt -t10
done
¡Las contribuciones son bienvenidas! No dudes en:
Esta herramienta se proporciona únicamente con fines educativos y de pruebas de seguridad autorizadas. Los usuarios son responsables de asegurarse de contar con la autorización adecuada antes de escanear cualquier sistema. El acceso no autorizado a sistemas informáticos es ilegal.
Este proyecto se proporciona tal cual para investigación de seguridad y pruebas autorizadas.
Creado por: austinjump-sec
Repositorio: austinjump-sec/API-SPY
| Argumento | Descripción |
|---|
--t<number> | Número de hilos (máx. 150, por defecto: 1) |
--split | Usar split-window de tmux en lugar de nuevas ventanas de terminal |
--debug | Muestra mensajes de error que de otro modo estarían ocultos |
--loud | Muestra todos los mensajes, positivos y errores, resaltando aquellos que no devuelven 404 |
--js | Escanea archivos JavaScript y extrae de los encontrados endpoints de API comunes hardcodeados |