
Uma ferramenta poderosa de brute-force de diretórios, projetada para operações recursivas/multiplex, descoberta e enumeração de APIs, extração de arquivos JS e listagem de métodos HTTP de API, em um único comando. Isso não é SOMENTE para APIs, minha ferramenta apenas se destaca nelas.
Uma ferramenta poderosa de brute-force em diretórios projetada para reconhecimento de API e testes de penetração. Descobre automaticamente endpoints ocultos de API, realiza subvarredura recursiva e testa métodos HTTP para enumeração mais aprofundada de APIs.
✨ Capacidades Principais:
requeststmux (opcional, para a flag --split)xfce-terminal (para ambientes desktop Linux)# Clone o repositório
git clone https://github.com/austinjump-sec/API-SPY.git
cd API-SPY
# Instale as dependências
pip install requests
# Torne os scripts executáveis (opcional)
chmod +x apispy.py apiprobe.py
python3 apispy.py <baseUrl> <wordlist> [OPÇÕES]
| Argumento | Descrição |
|---|---|
<baseUrl> | URL alvo (ex.: http://exemplo.com ou http://api.exemplo.com) |
<wordlist> | Caminho para o arquivo de wordlist contendo endpoints (um por linha) |
python3 apispy.py http://api.exemplo.com wordlist.txt
python3 apispy.py http://api.exemplo.com wordlist.txt -t10
python3 apispy.py http://api.exemplo.com wordlist.txt -t5 --split
python3 apispy.py http://api.exemplo.com/v1 wordlist.txt -t20
A ferramenta começa testando um conjunto predefinido de caminhos comuns de API:
api, v1, v2, api/v1, api/v2, graphql, rest#)200, 401, 403Quando um endpoint é encontrado, você recebe um prompt:
'-> Subscaneamento <url>? (s/n) [Pulo automático em 5s]:
s/sim para escanear recursivamente aquele endpoint com a mesma wordlistApós a subvarredura, você recebe um prompt:
'-> Testar métodos em <url>? (s/n) [Pulo automático em 5s]:
apiprobe.py que testa métodos HTTP no endpoint descobertoAllow[+] Url found: http://api.exemplo.com/v1 ← 200 OK (acessível)
'-> Subscaneamento http://api.exemplo.com/v1? (s/n) [Pulo automático em 0s]:
[-] Timeout: Skipped prompt for http://api.exemplo.com/v1?
'-> Testar métodos em http://api.exemplo.com/v1? (s/n) [Pulo automático em 4s]:
[-] Url found but not permitted (403 ERR): ... ← Proibido mas existe
[-] Url found but not permitted (401 ERR): ... ← Requer autenticação
[+] GET -> STATUS: 200 OK (Tamanho: 1024)
[-] POST -> STATUS: 405 (Tamanho: 0)
[Dica do Cabeçalho] Allow: GET, HEAD, OPTIONS
Crie um arquivo de texto simples com endpoints (um por linha):
admin
users
api/users
v1/products
v2/customers
/api/v1/auth
/graphql
search
data
config
Nota: Linhas iniciadas com # são tratadas como comentários e ignoradas.
Wordlists populares de API para usar com o API-SPY:
# Modo furtivo (poucas threads)
python3 apispy.py http://alvo.com wordlist.txt -t3
# Modo equilibrado
python3 apispy.py http://alvo.com wordlist.txt -t15
# Modo agressivo
python3 apispy.py http://alvo.com wordlist.txt -t50
timeout=5 no código-fonte para personalizarVerifique se o caminho da wordlist está correto e o arquivo existe:
ls -la /caminho/para/wordlist.txt
Ao subvarrer, certifique-se de que:
apispy.pyapiprobe.pySe --split falhar:
sudo apt install tmuxtmux new-session -s scancurl http://sua-url/check_status()⚠️ Legal e Ético:
Edite o código-fonte para ajustar os valores de timeout:
def ask_subscan(url, wordlist, timeout=10): # Altere de 5 para 10 segundos
Crie wordlists direcionadas a caminhos específicos de API:
# Apenas endpoints de admin
grep -i "admin" wordlist-completa.txt > wordlist-admin.txt
# Apenas API v1
grep "v1" wordlist-completa.txt > wordlist-v1.txt
Escaneie múltiplos alvos com um loop:
for target in http://alvo1.com http://alvo2.com http://alvo3.com; do
python3 apispy.py "$target" wordlist.txt -t10
done
Contribuições são bem-vindas! Sinta-se à vontade para:
Esta ferramenta é fornecida apenas para fins educacionais e de teste de segurança autorizado. Os usuários são responsáveis por garantir que possuem a devida autorização antes de escanear qualquer sistema. O acesso não autorizado a sistemas de computador é ilegal.
Este projeto é fornecido "como está" para pesquisa em segurança e testes autorizados.
Criado por: austinjump-sec
Repositório: austinjump-sec/API-SPY
| Argumento | Descrição |
|---|
--t<número> | Número de threads (máx. 150, padrão: 1) |
--split | Usa tmux split-window em vez de novas janelas de terminal |
--debug | Mostra mensagens de erro ocultas |
--loud | Mostra todas as mensagens, positivas e erros, destacando qualquer coisa que não retorne 404 |
--js | Escaneia arquivos JavaScript e extrai endpoints de API comuns fixados no código |