GCP Pentesting

Support HackTricks

基本信息

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

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

学习实验室

GCP Pentester/Red Team 方法论

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

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

  • 在github(或类似平台)中的泄露 - OSINT

  • 社交工程(查看页面 Workspace Security

  • 密码重用(密码泄露)

  • GCP托管应用中的漏洞

  • 服务器端请求伪造 访问元数据端点

  • 本地文件读取

  • /home/USERNAME/.config/gcloud/*

  • C:\Users\USERNAME\.config\gcloud\*

  • 第三方被攻破

  • 内部员工

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

或者如果您正在进行审查,您可以直接请求凭证,使用这些角色:

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

基本枚举

SSRF

有关如何枚举GCP元数据的更多信息,请查看以下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,您可以通过暴力破解来获取它们。 查看如何进行枚举和暴力破解

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

Services Enumeration

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

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

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

Privilege Escalation, Post Exploitation & Persistence

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

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

Publicly Exposed Services

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

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

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

参考

支持 HackTricks

Last updated