导语:本文我们将介绍不同类型的Azure文件存储以及我们该如何枚举和访问公开可用的“Blob”文件。

近年来,我们看到Microsoft Azure服务在云服务市场中占据了更大的市场份额。虽然并没有看到AWS的应用,但我们遇到了更多使用Microsoft Azure服务进行运维的客户端。如果一切都正确的配置,这将是极好的事情,但是完全安全的环境是非常罕见的(这就是我们进行安全测试的原因)。鉴于Azure使用量的增加,我们希望能够深入了解如何将标准的Azure测试任务自动化,包括公开的可用文件的枚举。在本博文中,我们将介绍不同类型的Azure文件存储以及我们该如何枚举和访问公开可用的“Blob”文件。

存储帐户

我们在Azure环境中发现一个用户可以通过存储帐户公开的暴露文件。这些问题非常类似于公共S3存储桶的问题(这里有一篇很好的入门文章)。“存储帐户” 是Microsoft在Azure中处理数据存储的方式。在core.windows.net域中为每个存储帐户分配了唯一的子域。

例如,如果我创建了netspiazure存储帐户,系统将分配netspiazure.core.windows.net这个域名给该帐户。

 storageAcct.png

该子域名结构还可以扩展到存储帐户中的不同文件类型:

· Blob – netspiazure.blob.core.windows.net

· 文件服务 – netspiazure.file.core.windows.net

· 数据表 – netspiazure.table.core.windows.net

· 队列 – netspiazure.queue.core.windows.net

Blob文件

在本文中,我们将专注于“Blob”这种文件类型的枚举,当然其他的数据类型也很有趣。Blob是微软的一种非结构化的数据存储对象。最常见的是,我们会看到这种数据对象用于提供静态公共数据,但我们发现blob会用于存储敏感信息(配置文件,数据库备份,凭据)。我们可以利用Google搜索Azure中的“blob.core.windows.net”子域,搜索到大约120万个PDF,我认为这里有相当不错的攻击面。

 googlePDFs.png

权限

blob本身存储在“Containers”中,基本上是一些文件夹。容器会分配给它们相应的访问策略,这些策略决定了文件的公共访问级别。

 permissions.png

如果容器具有“容器”公开访问策略,则匿名用户可以列出并读取容器中的任何文件。“Blob”公共访问策略仍允许匿名用户读取文件,但无法列出容器文件列表。“Blob”权限还会阻止攻击者通过 Azure Blob Service Rest API 对容器名称进行基本的确认。

自动化

考虑到我们遇到的Azure环境的数量,我想将我们的枚举公开blob文件的过程自动化。我比较偏爱PowerShell,但我写的这个脚本可能可以被移植到其他语言中。
可以在NetSPI的GitHub上找到我写的脚本代码 – https://github.com/NetSPI/MicroBurst
脚本的核心内容是对blob.core.windows.net子域进行DNS查找,来枚举有效的存储帐户,然后使用 Azure Blob Service REST API 暴力猜解容器名称。此外,可以在该工具中使用 Bing Search API 来查找已公开的编入索引的其他存储帐户和容器。识别出有效的容器名称后,我们再次使用Azure Blob API查看容器是否允许我们通过“Container”公共访问策略列出文件列表。为了得到有效的存储帐户名,我们可以在基本的名称(netspi)前面或后面拼接常见的排列词(dev,test,qa等)来进行暴力猜解,这些排列词保存在一个字典文件中。
这个脚本的编写思路以及部分排列词的列表来自于AWS S3存储桶的类似工具 – inSp3ctor

Invoke-EnumerateAzureBlobs 的用法

该脚本有五个参数:

· Base – 要在(netspi)上运行排列的基本名称

· Permutations – 包含与Base参数一起使用的字典文件,用于查找存储帐户(netspidev,testnetspi等)

· Folders – 指定包含你想要暴力猜解所使用的潜在文件夹名称的文件(文件,文档等)

· BingAPIKey – Bing API用于查找其他公开文件的密钥

· OutputFile – 指定将输出写入的文件

示例输出:

PS C:\> Invoke-EnumerateAzureBlobs -Base secure -BingAPIKey 12345678901234567899876543210123
Found Storage Account -  secure.blob.core.windows.net
Found Storage Account -  testsecure.blob.core.windows.net
Found Storage Account -  securetest.blob.core.windows.net
Found Storage Account -  securedata.blob.core.windows.net
Found Storage Account -  securefiles.blob.core.windows.net
Found Storage Account -  securefilestorage.blob.core.windows.net
Found Storage Account -  securestorageaccount.blob.core.windows.net
Found Storage Account -  securesql.blob.core.windows.net
Found Storage Account -  hrsecure.blob.core.windows.net
Found Storage Account -  secureit.blob.core.windows.net
Found Storage Account -  secureimages.blob.core.windows.net
Found Storage Account -  securestorage.blob.core.windows.net

Bing Found Storage Account - notrealstorage.blob.core.windows.net

Found Container - hrsecure.blob.core.windows.net/NETSPItest
    Public File Available: https://hrsecure.blob.core.windows.net/NETSPItest/SuperSecretFile.txt
    Public File Available: https://hrsecure.blob.core.windows.net/NETSPItest/TaxReturn.pdf
Found Container - secureimages.blob.core.windows.net/NETSPItest123
    Empty Public Container Available: https://secureimages.blob.core.windows.net/NETSPItest123?restype=container&comp=list

默认情况下,“Permutations”和“Folders”参数都设置为脚本附带的permutations.txt文件。你可以通过向该文件添加任何客户端或环境特定术语来增加查找到文件的机会。
添加Bing API密钥还有助于查找包含基本单词的其他存储帐户。如果你尚未设置Bing API密钥,请导航至 Azure门户 的“认知服务”部分,并为你的帐户创建新的“Bing Search v7”实例。有一个免费的定价等级,每月最多可以拨打3,000个电话,这足够用了。
如果你使用Bing API密钥,系统将提示你使用out-gridview选择窗口来选择你要查看的任何存储帐户。有一些公开索引的Azure存储帐户似乎在大多数公司名称上都出现过。这些帐户似乎是为多家公司编制索引文档或数据,因此它们往往会出现在Bing的搜索结果中。其中一些帐户也有公开的文件列表,因此可能会为你提供一个你并不关心的大量公开文件。到目前为止我在用我编写的脚本时运气都不错,希望你也是这样。
如果你对脚本有任何问题,请随时在GitHub页面上发表评论或提交请求。

源链接

Hacking more

...