GCPBucketBrute
用于枚举 Google 存储桶、确定您对它们拥有哪些访问权限以及确定它们是否可以进行权限升级的脚本。
- 此脚本(可选)接受 GCP 用户/服务帐户凭据和关键字。
- 然后,将从该关键字生成一个排列列表,然后将其用于扫描具有这些名称的 Google 存储桶是否存在。
- 如果提供了凭据,则大多数枚举仍将在未经身份验证时执行,但对于通过未经身份验证的枚举发现的任何存储桶,它将尝试使用 TestIamPermissions API 和提供的凭据来枚举存储桶权限。这将有助于找到在经过身份验证时可访问但未经身份验证时不可访问的存储桶。
- 无论是否提供凭据,脚本都会在未经身份验证的情况下尝试使用 TestIamPermissions API 枚举存储桶权限。这意味着,如果您不输入凭据,则只会显示未经身份验证的用户拥有的权限,但如果您输入凭据,您将看到经过身份验证的用户与未经身份验证的用户相比具有哪些访问权限。
- 警告:如果提供了凭据,您的用户名可能会在您发现的任何存储桶的访问日志中泄露。
TL;DR 总结
- 给定一个关键字,该脚本会根据该关键字生成的多个排列来枚举 Google 存储桶。
- 然后,任何发现的桶都会被输出。
- 然后,您被授予的任何已发现存储桶的任何权限(如果有)都将被输出。
- 然后,脚本将检查这些权限是否有权限升级(storage.buckets.setIamPolicy),并输出任何有趣的内容(例如公开可列出、公开可写、经过身份验证的可列出、权限升级等)。
要求
- Linux/OS X
- Windows 仅适用于未经身份验证的扫描。脚本使用子进程模块的方式存在问题,因为在使用经过身份验证的 Google 客户端时会失败。
- Python3
- 点3
安装
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
-
cd GCPBucketBrute/
-
pip3 install -r requirements.txt
或python3 -m pip install -r requirements.txt
用法
首先,确定要用于用户帐户、服务帐户或未经身份验证之间的枚举的身份验证类型。如果您使用服务帐户,请通过-f
/ --service-account-credential-file-path
参数提供私钥的文件路径。如果您使用用户帐户,请勿提供身份验证参数。然后,系统将提示您输入用户帐户的访问令牌以访问 GCP API。如果要完全未经身份验证进行扫描,请传递-u
/ --unauthenticated
参数以隐藏身份验证提示。
- 在完全未经身份验证的情况下使用关键字“test”扫描存储桶:
python3 gcpbucketbrute.py -k test -u
- 使用关键字“test”扫描存储桶,同时使用服务帐户(私钥存储在 ../sa-priv-key.pem)进行身份验证,将结果输出到当前目录中的 out.txt:
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- 使用关键字“test”扫描存储桶,使用用户帐户访问令牌,运行 10 个子进程而不是 5 个:
python3 gcpbucketbrute.py -k test -s 10
可用参数
-k
/ --keyword
- 此参数用于指定将使用哪个关键字来生成排列。这些排列将在 Google Storage 中搜索。
-
--check
- 此参数与
-k
/ --keyword
互斥,并接受单个字符串。它允许您检查特定存储桶的权限,而不是根据关键字生成排列列表。可以重复此操作以检查多个桶。信用:@BBerastegui
-
--check-list
- 此参数与
-k
/ --keyword
和--check
互斥。它允许您检查文件中存储桶列表的权限。它们应该在文本文件中每行列出一个。要从标准输入读取,请传递-
作为文件名。
-
-s
/ --subprocesses
- 此参数指定将使用多少个子进程进行存储桶枚举。默认值为 5,该值设置得越高,枚举速度就越快,但每秒向 Google 发出的请求将会增加。这些本质上是线程,但脚本使用子进程而不是线程来并行执行。
-
-f
/ --service-account-credential-file-path
- 您可以在该参数中指定要用于对 Google Storage 进行身份验证的 GCP 服务帐户的私钥文件的路径。这是可选的。如果您想改用访问令牌,请省略此参数,系统将提示您输入令牌,这样它就不会保存到您的命令行历史记录中。更多信息请访问:https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files 和此处:https://google-auth.readthedocs.io/ en/latest/user-guide.html#user-credentials
-
-u
/ --unauthenticated
- 此参数强制进行未经身份验证的枚举。使用此标志,系统将不会提示您输入凭据,并且不会检查有效存储桶的经过身份验证的权限。
-
-o
/ --out-file
- 此参数允许您指定要输出结果的日志文件的(相对或绝对)文件路径。如果该文件尚不存在,则将创建该文件;如果该文件已存在,则将其附加到该文件。
-
-w
/ --wordlist