GCP Pentesting

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

基本信息

在开始对 GCP 环境进行渗透测试之前,您需要了解一些基本知识,以帮助您理解需要做什么、如何查找错误配置以及如何利用它们。

诸如 组织 层次结构、权限 和其他基本概念在以下内容中进行了说明:

GCP - Basic Information

学习实验室

GCP 渗透测试/红队方法论

为了审计 GCP 环境,了解以下内容非常重要:使用了哪些 服务,什么是 被暴露的,谁有 访问 权限,以及内部 GCP 服务与 外部服务 是如何连接的。

从红队的角度来看,攻陷 GCP 环境的第一步是设法获取一些 凭据。以下是一些获取凭据的想法:

  • 泄露 在 github(或类似平台)- OSINT
  • 社交 工程(查看页面 Workspace Security
  • 密码 重用(密码泄露)
  • GCP 托管应用程序中的漏洞
  • 服务器端请求伪造 访问元数据端点
  • 本地文件读取
  • /home/USERNAME/.config/gcloud/*
  • C:\Users\USERNAME\.config\gcloud\*
  • 第三方 被攻破
  • 内部 员工

或者通过 攻陷一个未认证的服务

GCP - Unauthenticated Enum & Access

或者如果您正在进行 审查,您可以直接 请求凭据,角色如下:

GCP - Permissions for a Pentest

Note

在您成功获取凭据后,您需要知道 这些凭据属于谁,以及 他们可以访问什么,因此您需要进行一些基本的枚举:

基本枚举

SSRF

有关如何 枚举 GCP 元数据 的更多信息,请查看以下 hacktricks 页面:

Cloud SSRF - HackTricks

Whoami

在 GCP 中,您可以尝试几种选项来猜测您是谁:

#If you are inside a compromise machine
gcloud auth list
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=$(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/tokeninfo
gcloud auth print-identity-token #Get info from the token

#If you compromised a metadata token or somehow found an OAuth token
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=<token>" https://www.googleapis.com/oauth2/v1/tokeninfo

您还可以使用 API 端点 /userinfo 获取有关用户的更多信息:

curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth $(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/userinfo

curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth <access_token>" https://www.googleapis.com/oauth2/v1/userinfo

组织枚举

# Get organizations
gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID
gcloud resource-manager folders list --organization <org_number> # Get folders
gcloud projects list # Get projects

Principals & IAM Enumeration

如果您拥有足够的权限,检查 GCP 账户中每个实体的权限将帮助您了解您和其他身份可以做什么,以及如何提升权限

如果您没有足够的权限来枚举 IAM,您可以通过暴力破解来窃取它们以找出它们。
请查看如何进行枚举和暴力破解

GCP - IAM, Principals & Org Policies Enum

Note

现在您对您的凭据有了一些信息(如果您是红队,希望您没有被发现)。是时候找出环境中正在使用哪些服务了。
在接下来的部分中,您可以查看一些枚举常见服务的方法。

Services Enumeration

GCP 拥有惊人的服务数量,在以下页面中,您将找到基本信息、枚举备忘单,如何避免检测,获取持久性以及其他关于其中一些服务的后期利用技巧:

GCP - Services

请注意,您需要手动执行所有工作,下面的帖子中您可以找到关于 自动工具 的部分。

此外,在此阶段,您可能会发现**更多暴露给未认证用户的服务,**您可能能够利用它们:

GCP - Unauthenticated Enum & Access

Privilege Escalation, Post Exploitation & Persistence

一旦您获得了一些云凭据或已妥协某个在云中运行的服务,最常见的方法是滥用被妥协账户可能拥有的错误配置权限。因此,您应该做的第一件事是枚举您的权限。

此外,在此枚举过程中,请记住权限可以在“组织”的最高级别设置

GCP - Privilege Escalation

GCP - Post Exploitation

GCP - Persistence

Publicly Exposed Services

在枚举 GCP 服务时,您可能发现其中一些向互联网暴露元素(VM/容器端口、数据库或队列服务、快照或存储桶…)。
作为渗透测试者/红队成员,您应该始终检查是否可以在它们上找到敏感信息/漏洞,因为它们可能为您提供进一步访问 AWS 账户的机会。

在本书中,您应该找到关于如何查找暴露的 GCP 服务以及如何检查它们的信息。关于如何查找暴露的网络服务中的漏洞,我建议您搜索特定的服务

HackTricks - HackTricks

GCP <–> Workspace Pivoting

妥协一个平台中的主体可能允许攻击者妥协另一个平台,请查看:

GCP <–> Workspace Pivoting

Automatic Tools

# Install
git clone https://github.com/google/gcp_scanner.git
cd gcp_scanner
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
# Execute with gcloud creds
python3 __main__.py -o /tmp/output/ -g "$HOME/.config/gcloud"
  • gcp_enum: Bash 脚本,用于使用 gcloud cli 枚举 GCP 环境并将结果保存到文件中。
  • GCP-IAM-Privilege-Escalation: 脚本用于枚举高 IAM 权限并在 GCP 中利用这些权限提升权限(我无法运行枚举脚本)。
  • BF My GCP Permissions: 脚本用于暴力破解您的权限。

gcloud config & debug

# Login so gcloud can use your credentials
gcloud auth login
gcloud config set project security-devbox
gcloud auth print-access-token

# Login so SDKs can use your user credentials
gcloud auth application-default login
gcloud auth application-default set-quota-project security-devbox
gcloud auth application-default print-access-token

# Update gcloud
gcloud components update

捕获 gcloud, gsutil… 网络

请记住,您可以使用 参数 --log-httpgcloud cli 一起 打印 工具正在执行的 请求。如果您不希望日志隐藏令牌值,请使用 gcloud config set log_http_redact_token false

此外,要拦截通信:

gcloud config set proxy/address 127.0.0.1
gcloud config set proxy/port 8080
gcloud config set proxy/type http
gcloud config set auth/disable_ssl_validation True

# If you don't want to completely disable ssl_validation use:
gcloud config set core/custom_ca_certs_file cert.pem

# Back to normal
gcloud config unset proxy/address
gcloud config unset proxy/port
gcloud config unset proxy/type
gcloud config unset auth/disable_ssl_validation
gcloud config unset core/custom_ca_certs_file

在 gcloud 中配置 OAuth 令牌

为了使用从元数据端点提取的服务帐户 OAuth 令牌,您只需执行:

# Via env vars
export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
gcloud projects list

# Via setup
echo "<token>" > /some/path/to/token
gcloud config set auth/access_token_file /some/path/to/token
gcloud projects list
gcloud config unset auth/access_token_file

参考

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks