
Ferramenta de OSINT multi-cloud. Enumera recursos públicos na AWS, no Azure e no Google Cloud.
Eu construí esta ferramenta em 2019 para um pentest envolvendo Azure, pois nenhuma outra ferramenta de enumeração o suportava na época. Ela cresceu a partir daí, e aprendi muito enquanto adicionava funcionalidades.
Construir ferramentas é divertido, mas mantê-las é difícil. Não uso ativamente esta ferramenta há um tempo, mas fiz o possível para corrigir bugs e revisar pull requests.
Daqui para frente, faz sentido consolidar essa funcionalidade em um projeto bem mantido que cuide do essencial (requisições web/dns, threading, I/O, logging, etc.). O Nuclei é muito adequado para isso. Você pode ver meu primeiro PR para migrar a funcionalidade do cloud_enum para o Nuclei aqui.
Encorajo outros a contribuir com templates para o Nuclei, permitindo que nos concentremos em detectar recursos de nuvem enquanto deixamos a base para o Nuclei.
Ainda tentarei revisar PRs aqui para corrigir bugs conforme o tempo permitir, mas provavelmente não terei tempo para mudanças maiores.
Obrigado a todos os ótimos contribuidores. Boa sorte com seu recon!
Ferramenta OSINT multi-cloud. Enumere recursos públicos na AWS, Azure e Google Cloud.
Atualmente enumera o seguinte:
Amazon Web Services:
Microsoft Azure:
Google Cloud Platform
Veja em ação na demonstração em vídeo de Codingo aqui.
Este projeto usa uv para gerenciamento de dependências. Instale o uv, depois execute:
uv sync
Ou instale como uma ferramenta standalone:
uv tool install git+https://github.com/initstring/cloud_enum
O único argumento obrigatório é pelo menos uma palavra-chave. Você pode usar as strings de fuzzing integradas, mas obterá melhores resultados se fornecer as suas próprias com -m e/ou -b.
Você pode fornecer múltiplas palavras-chave especificando o argumento -k várias vezes.
As palavras-chave são mutadas automaticamente usando strings de enum_tools/fuzz.txt ou um arquivo que você fornecer com a flag -m. Serviços que exigem um segundo nível de brute force (Azure Containers e GCP Functions) também usarão fuzz.txt por padrão ou um arquivo que você fornecer com a flag -b.
Digamos que você estivesse pesquisando "somecompany" cujo site é "somecompany.io" que fabrica um produto chamado "blockchaindoohickey". Você poderia executar a ferramenta assim:
uv run cloud_enum -k somecompany -k somecompany.io -k blockchaindoohickey
HTTP scraping e DNS lookups usam 5 threads cada por padrão. Você pode tentar aumentar isso, mas eventualmente os provedores de nuvem vão limitar sua taxa. Aqui está um exemplo para aumentar para 10.
uv run cloud_enum -k keyword -t 10
IMPORTANTE: Alguns recursos (Azure Containers, GCP Functions) são descobertos por região. Para economizar tempo de varredura, há uma variável "REGIONS" definida em enum_tools/azure_regions.py e enum_tools/gcp_regions.py que é configurada por padrão para usar apenas 1 região. Você pode querer olhar esses arquivos e editá-los para serem relevantes ao seu próprio trabalho.
Detalhes Completos de Uso
usage: cloud_enum [-h] (-k KEYWORD | -kf KEYFILE) [-m MUTATIONS] [-b BRUTE] [-t THREADS]
[-ns NAMESERVER] [-nsf NAMESERVERFILE] [-l LOGFILE] [-f FORMAT] [--disable-aws]
[--disable-azure] [--disable-gcp] [-qs]
Multi-cloud enumeration utility. All hail OSINT!
options:
-h, --help show this help message and exit
-k, --keyword KEYWORD
Keyword. Can use argument multiple times.
-kf, --keyfile KEYFILE
Input file with a single keyword per line.
-m, --mutations MUTATIONS
Mutations. Default: enum_tools/fuzz.txt
-b, --brute BRUTE List to brute-force Azure container names. Default: enum_tools/fuzz.txt
-t, --threads THREADS
Threads for HTTP brute-force. Default = 5
-ns, --nameserver NAMESERVER
DNS server to use in brute-force. Default: 1.1.1.1
-nsf, --nameserverfile NAMESERVERFILE
Path to the file containing nameserver IPs
-l, --logfile LOGFILE
Appends found items to specified file.
-f, --format FORMAT Format for log file (text,json,csv) - default: text
--disable-aws Disable Amazon checks.
--disable-azure Disable Azure checks.
--disable-gcp Disable Google checks.
-qs, --quickscan Disable all mutations and second-level scans
Até agora, peguei emprestado de: