Goblob 是一款轻量且快速的枚举工具,旨在帮助发现 Azure Blob 中公开暴露的敏感信息,可用于漏洞评估、渗透测试和情报收集等各种研究目的。
警告。Goblob 会为每个存储账户中的每个容器名称生成独立的协程,仅受 -goroutines 参数指定的最大并发协程数限制。在大多数情况下,使用默认词表时,这种实现方式会迅速耗尽带宽,或者如果您在云环境中使用该工具,可能会产生高昂的费用。运行该工具前,请确保您清楚自己在做什么。
go install github.com/Macmod/goblob@latest
使用 goblob 只需运行以下命令:
$ ./goblob <storageaccountname>
其中 <storageaccountname> 是目标存储账户名称,用于枚举其公开的 Azure Blob 存储 URL。
您也可以指定一个列表来检查多个存储账户名称:
$ ./goblob -accounts accounts.txt
默认情况下,该工具会使用一份常见的 Azure Blob 存储容器名称列表来构造潜在的 URL。不过,您也可以使用 -containers 选项指定自定义的容器名称列表。例如:
$ ./goblob -accounts accounts.txt -containers wordlists/goblob-folder-names.txt
该工具还支持使用 -output 选项将结果输出到文件:
$ ./goblob -accounts accounts.txt -containers wordlists/goblob-folder-names.txt -output results.txt
如果您想通过 stdin 提供待测试的账户,也可以完全省略 -accounts(或账户名称):
$ cat accounts.txt | ./goblob
Goblob 内附了基本的词表,可通过 -containers 选项使用:
Goblob 提供了多个参数,可用于调整枚举过程:
-goroutines=N - 允许的最大并发协程数(默认:5000)。-blobs=true - 报告每个 blob 的 URL 而非容器的 URL(默认:false)。-verbose=N - 设置详细程度(默认:1,最小:0,最大:3)。-maxpages=N - 遍历容器页面寻找 blob 的最大页数(默认:20,设为 -1 取消限制,设为 0 则完全避免列出 blob,仅检查容器是否公开)。-timeout=N - HTTP 请求超时时间(秒,默认:90)。-maxidleconns=N - HTTP 客户端的 传输参数(默认:)。例如,如果您只想使用大量存储账户和容器名称列表来查找公开暴露的容器,应使用 -maxpages=0 防止协程进行分页。然后,在所找到的结果集上再次运行,并设置 -blobs=true 和 -maxpages=-1 来实际获取 blob 的 URL。
另一方面,如果您想用一小份非常流行的容器名称列表来测试大量存储账户,可以尝试使用 -invertsearch=true 和 -maxpages=0,以便查看每个容器名称对应的公开账户,而不是每个存储账户对应的容器名称。
您还可以尝试调整 -goroutines、-timeout、-maxidleconns、-maxidleconnsperhost、-maxconnsperhost 和 -skipssl 参数,以充分利用带宽并更快地找到结果。
请试验这些参数,找到最适合您的方式 ;-)
欢迎通过提交 Issue 或提交 Pull Request 的方式贡献代码。
以下是我在使用该工具的实验中发现的流行容器名称的可视化图像,非常有趣:

如果您想了解更多关于我的实验以及该主题的一般信息,请阅读我的文章:
MIT 许可证 (MIT)
版权所有 (c) 2023 Artur Henrique Marzano Gonzaga
兹授予任何人免费获得本软件及附带文档文件(“软件”)副本的权利,允许其不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许获得软件的人在满足以下条件的情况下这样做:
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
本软件按“原样”提供,不提供任何明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权持有人均不对因软件或软件的使用或其他交易而产生的任何索赔、损害赔偿或其他责任负责,无论该责任是基于合同、侵权或其他原因。
MaxIdleConns100-maxidleconnsperhost=N - HTTP 客户端的 MaxIdleConnsPerHost 传输参数(默认:10)。-maxconnsperhost=N - HTTP 客户端的 MaxConnsPerHost 传输参数(默认:0)。-skipssl=true - 跳过 SSL 验证(默认:false)。-invertsearch=true - 对每个容器枚举账户,而非对每个账户枚举容器(默认:false)。