GCP Pentesting

支持 HackTricks

基本信息

在开始 pentesting 一个 GCP 环境之前,有一些基本的事情你需要知道,以帮助你理解需要做什么,如何发现错误配置以及如何利用它们。

诸如组织层次结构、权限和其他基本概念在以下内容中解释:

GCP - Basic Information

学习实验室

GCP Pentester/Red Team 方法论

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

从 Red Team 的角度来看,攻破 GCP 环境的第一步是设法获取一些凭证。这里有一些方法:

  • github(或类似)上的泄漏 - OSINT

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

  • 密码重用(密码泄漏)

  • GCP 托管应用程序中的漏洞

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

  • 本地文件读取

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

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

  • 第三方泄漏

  • 内部员工

或者通过攻破暴露的未认证服务

GCP - Unauthenticated Enum & Access

或者如果你在进行审查,你可以请求这些角色的凭证

GCP - Permissions for a Pentest

在你设法获取凭证后,你需要知道这些凭证属于谁,以及他们有访问权限,所以你需要进行一些基本的枚举:

基本枚举

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

组织枚举

# 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

现在你有了一些关于你凭证的信息(如果你是红队,希望你没有被检测到)。是时候弄清楚环境中使用了哪些服务了。 在以下部分,你可以查看一些枚举常见服务的方法。

Services Enumeration

GCP有大量的服务,在以下页面中你会找到基本信息、枚举备忘单,如何避免检测,获得持久性,以及其他一些后期利用技巧:

GCP - Services

注意,你不需要全部手动完成工作,在这篇文章的下面你可以找到一个关于自动化工具部分

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

GCP - Unauthenticated Enum & Access

Privilege Escalation, Post Exploitation & Persistence

一旦你获得了一些云凭证或入侵了一些在云中运行的服务,最常见的方法是滥用被入侵账户可能拥有的错误配置的权限。所以,你首先应该做的是枚举你的权限。

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

GCP - Privilege EscalationGCP - Post ExploitationGCP - Persistence

Publicly Exposed Services

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

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

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: 使用 gcloud cli 枚举 GCP 环境并将结果保存到文件中的 Bash 脚本。

  • 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 一起 打印 工具正在执行的 请求。如果你不希望日志编辑 token 值,使用 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

OAuth token configure in gcloud

为了使用从元数据端点泄露的服务账户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