
Una herramienta de enumeración rápida para blobs de Azure Storage expuestos públicamente.
Goblob es una herramienta de enumeración ligera y rápida diseñada para ayudar en el descubrimiento de información sensible expuesta públicamente en blobs de Azure, lo cual puede ser útil para diversos fines de investigación como evaluaciones de vulnerabilidades, pruebas de penetración y reconocimiento.
Advertencia. Goblob iniciará goroutines individuales para cada nombre de contenedor a verificar en cada cuenta de almacenamiento, solo limitado por el número máximo de goroutines concurrentes especificado en la bandera -goroutines. Esta implementación puede agotar el ancho de banda bastante rápido en la mayoría de los casos con la lista de palabras predeterminada, o potencialmente costarle mucho dinero si usa la herramienta en un entorno de nube. Asegúrese de entender lo que está haciendo antes de ejecutar la herramienta.
go install github.com/Macmod/goblob@latest
Para usar goblob simplemente ejecute el siguiente comando:
$ ./goblob <storageaccountname>
Donde <storageaccountname> es la cuenta de almacenamiento objetivo para enumerar URLs públicas de blobs de Azure.
También puede especificar una lista de nombres de cuentas de almacenamiento para verificar:
$ ./goblob -accounts accounts.txt
Por defecto, la herramienta usará una lista de nombres comunes de contenedores de Azure Blob Storage para construir URLs potenciales. Sin embargo, también puede especificar una lista personalizada de nombres de contenedores usando la opción -containers. Por ejemplo:
$ ./goblob -accounts accounts.txt -containers wordlists/goblob-folder-names.txt
La herramienta también soporta la salida de resultados a un archivo usando la opción -output:
$ ./goblob -accounts accounts.txt -containers wordlists/goblob-folder-names.txt -output results.txt
Si desea proporcionar cuentas para probar a través de stdin, también puede omitir -accounts (o el nombre de la cuenta) por completo:
$ cat accounts.txt | ./goblob
Goblob viene incluido con listas de palabras básicas que se pueden usar con la opción -containers:
Goblob proporciona varias banderas que se pueden ajustar para mejorar el proceso de enumeración:
-goroutines=N - Número máximo de goroutines concurrentes permitidas (por defecto: 5000).-blobs=true - Reportar la URL de cada blob en lugar de la URL de los contenedores (por defecto: false).-verbose=N - Establecer nivel de verbosidad (por defecto: 1, mínimo: 0, máximo: 3).-maxpages=N - Máximo de páginas de contenedor a recorrer buscando blobs (por defecto: 20, ajuste a -1 para deshabilitar el límite o a 0 para evitar listar blobs por completo y solo verificar si el contenedor es público)-timeout=N - Tiempo de espera para solicitudes HTTP (segundos, por defecto: 90)Por ejemplo, si solo desea encontrar contenedores expuestos públicamente usando listas grandes de cuentas de almacenamiento y nombres de contenedores, debería usar -maxpages=0 para evitar que las goroutines paginen los resultados. Luego ejecútelo nuevamente sobre el conjunto de resultados que encontró con -blobs=true y -maxpages=-1 para obtener realmente las URLs de los blobs.
Si, por otro lado, desea probar una lista pequeña de nombres de contenedores muy populares contra un gran conjunto de cuentas de almacenamiento, podría probar -invertsearch=true con -maxpages=0, para ver las cuentas públicas para cada nombre de contenedor en lugar de los nombres de contenedor para cada cuenta de almacenamiento.
También puede intentar cambiar -goroutines, -timeout y -maxidleconns, -maxidleconnsperhost y -maxconnsperhost y -skipssl para usar mejor su ancho de banda y encontrar resultados más rápido.
Experimente con las banderas para encontrar lo que mejor funcione para usted ;-)
Las contribuciones son bienvenidas abriendo un issue o enviando un pull request.
Una visualización interesante de nombres de contenedores populares encontrados en mis experimentos con la herramienta:

Si desea saber más sobre mis experimentos y el tema en general, eche un vistazo a mi artículo:
La Licencia MIT (MIT)
Copyright (c) 2023 Artur Henrique Marzano Gonzaga
Por la presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para tratar el Software sin restricción, incluidos, sin limitación, los derechos de usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y/o vender copias del Software, y para permitir a las personas a quienes se proporcione el Software hacer lo mismo, sujeto a las siguientes condiciones:
El aviso de copyright anterior y este aviso de permiso deberán incluirse en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES POR NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRA MANERA, DERIVADA DE, O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.
-maxidleconns=N - Parámetro de transporte MaxIdleConns para el cliente HTTP (por defecto: 100)-maxidleconnsperhost=N - Parámetro de transporte MaxIdleConnsPerHost para el cliente HTTP (por defecto: 10)-maxconnsperhost=N - Parámetro de transporte MaxConnsPerHost para el cliente HTTP (por defecto: 0)-skipssl=true - Omitir verificación SSL (por defecto: false)-invertsearch=true - Enumerar cuentas para cada contenedor en lugar de contenedores para cada cuenta (por defecto: false)