
Uma ferramenta rápida de enumeração para blobs do Azure Storage publicamente expostos.
Goblob é uma ferramenta de enumeração leve e rápida, projetada para ajudar na descoberta de informações sensíveis expostas publicamente em blobs do Azure, o que pode ser útil para diversos fins de pesquisa, como avaliações de vulnerabilidades, testes de penetração e reconhecimento.
Aviso. O Goblob criará goroutines individuais para cada nome de contêiner a ser verificado em cada conta de armazenamento, limitado apenas pelo número máximo de goroutines simultâneas especificado na flag -goroutines. Essa implementação pode esgotar a largura de banda rapidamente na maioria dos casos com a wordlist padrão, ou potencialmente custar muito dinheiro se você estiver usando a ferramenta em um ambiente de nuvem. Certifique-se de entender o que está fazendo antes de executar a ferramenta.
go install github.com/Macmod/goblob@latest
Para usar o goblob, basta executar o seguinte comando:
$ ./goblob <nomecontaarmazenamento>
Onde <nomecontaarmazenamento> é a conta de armazenamento alvo para enumerar URLs públicas de blob storage do Azure.
Você também pode especificar uma lista de nomes de contas de armazenamento para verificar:
$ ./goblob -accounts contas.txt
Por padrão, a ferramenta usará uma lista de nomes comuns de contêineres do Azure Blob Storage para construir URLs potenciais. No entanto, você também pode especificar uma lista personalizada de nomes de contêineres usando a opção -containers. Por exemplo:
$ ./goblob -accounts contas.txt -containers wordlists/goblob-folder-names.txt
A ferramenta também suporta a saída dos resultados para um arquivo usando a opção -output:
$ ./goblob -accounts contas.txt -containers wordlists/goblob-folder-names.txt -output resultados.txt
Se você quiser fornecer contas para testar via stdin, também pode omitir -accounts (ou o nome da conta) completamente:
$ cat contas.txt | ./goblob
O Goblob vem com wordlists básicas que podem ser usadas com a opção -containers:
O Goblob fornece várias flags que podem ser ajustadas para melhorar o processo de enumeração:
-goroutines=N - Número máximo de goroutines simultâneas permitidas (padrão: 5000).-blobs=true - Relatar a URL de cada blob em vez da URL dos contêineres (padrão: false).-verbose=N - Definir nível de verbosidade (padrão: 1, mínimo: 0, máximo: 3).-maxpages=N - Número máximo de páginas de contêiner a percorrer em busca de blobs (padrão: 20, defina como -1 para desabilitar o limite ou como 0 para evitar listar blobs completamente e apenas verificar se o contêiner é público)-timeout=N - Tempo limite para requisições HTTP (segundos, padrão: 90)Por exemplo, se você deseja apenas encontrar contêineres publicamente expostos usando listas grandes de contas de armazenamento e nomes de contêineres, deve usar -maxpages=0 para evitar que as goroutines paginem os resultados. Em seguida, execute novamente no conjunto de resultados encontrados com -blobs=true e -maxpages=-1 para realmente obter as URLs dos blobs.
Se, por outro lado, você quiser testar uma pequena lista de nomes de contêineres muito populares contra um grande conjunto de contas de armazenamento, você pode tentar -invertsearch=true com -maxpages=0, para ver as contas públicas para cada nome de contêiner em vez dos nomes de contêineres para cada conta de armazenamento.
Você também pode tentar alterar -goroutines, -timeout e -maxidleconns, -maxidleconnsperhost e -maxconnsperhost e -skipssl para aproveitar melhor sua largura de banda e encontrar resultados mais rapidamente.
Experimente as flags para descobrir o que funciona melhor para você ;-)
Contribuições são bem-vindas abrindo uma issue ou enviando um pull request.
Uma visualização interessante dos nomes de contêineres populares encontrados em meus experimentos com a ferramenta:

Se você quiser saber mais sobre meus experimentos e o assunto em geral, dê uma olhada no meu artigo:
The MIT License (MIT)
Copyright (c) 2023 Artur Henrique Marzano Gonzaga
A permissão é concedida, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para lidar com o Software sem restrição, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender cópias do Software, e permitir que as pessoas a quem o Software é fornecido o façam, sob as seguintes condições:
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO E NÃO VIOLAÇÃO. EM NENHUM CASO OS AUTORES OU DETENTORES DOS DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.
-maxidleconns=N - Parâmetro de transporte MaxIdleConns para o cliente HTTP (padrão: 100)-maxidleconnsperhost=N - Parâmetro de transporte MaxIdleConnsPerHost para o cliente HTTP (padrão: 10)-maxconnsperhost=N - Parâmetro de transporte MaxConnsPerHost para o cliente HTTP (padrão: 0)-skipssl=true - Pular verificação SSL (padrão: false)-invertsearch=true - Enumerar contas para cada contêiner em vez de contêineres para cada conta (padrão: false)