GCP - local privilege escalation ssh pivoting

支持 HackTricks

在这种情况下,我们假设您已经入侵了计算引擎项目中虚拟机中的非特权帐户

令人惊讶的是,您已经入侵的计算引擎的 GCP 权限可能帮助您在机器内部本地升级特权。即使在云环境中这并不总是非常有用,但知道这是可能的也是好的。

阅读脚本

计算实例可能存在执行一些脚本以使用其服务帐户执行操作。

由于 IAM 是如此细粒度,一个帐户可能对资源具有读/写权限,但没有列出权限

一个很好的假设示例是一个具有权限将备份读/写到名为 instance82736-long-term-xyz-archive-0332893 的存储桶的计算实例。

从命令行运行 gsutil ls 不返回任何内容,因为服务帐户缺少 storage.buckets.list IAM 权限。但是,如果您运行 gsutil ls gs://instance82736-long-term-xyz-archive-0332893,您可能会找到完整的文件系统备份,从而使您可以明文访问您的本地 Linux 帐户缺少的数据。

您可能会在脚本中(bash、Python、Ruby 等)找到此存储桶名称。

自定义元数据

管理员可以在实例项目级别添加自定义元数据。这只是一种将任意键/值对传递到实例中的方法,通常用于环境变量和启动/关闭脚本。

此外,还可以添加用户数据,这是一个将在每次启动或重新启动机器时执行的脚本,并且也可以从元数据端点访问。

有关更多信息,请查看:

滥用 IAM 权限

以下大多数建议的权限都是授予默认的 Compute SA,唯一的问题是默认访问范围阻止 SA 使用它们。但是,如果启用了**cloud-platform** 范围或只启用了**compute** 范围,您将能够滥用它们

检查以下权限:

在文件系统中搜索密钥

检查其他用户是否已经在盒子内部使用 gcloud 登录并在文件系统中留下了他们的凭据:

sudo find / -name "gcloud"

以下是最有趣的文件:

  • ~/.config/gcloud/credentials.db

  • ~/.config/gcloud/legacy_credentials/[ACCOUNT]/adc.json

  • ~/.config/gcloud/legacy_credentials/[ACCOUNT]/.boto

  • ~/.credentials.json

更多 API 密钥正则表达式

TARGET_DIR="/path/to/whatever"

# Service account keys
grep -Pzr "(?s){[^{}]*?service_account[^{}]*?private_key.*?}" \
"$TARGET_DIR"

# Legacy GCP creds
grep -Pzr "(?s){[^{}]*?client_id[^{}]*?client_secret.*?}" \
"$TARGET_DIR"

# Google API keys
grep -Pr "AIza[a-zA-Z0-9\\-_]{35}" \
"$TARGET_DIR"

# Google OAuth tokens
grep -Pr "ya29\.[a-zA-Z0-9_-]{100,200}" \
"$TARGET_DIR"

# Generic SSH keys
grep -Pzr "(?s)-----BEGIN[ A-Z]*?PRIVATE KEY[a-zA-Z0-9/\+=\n-]*?END[ A-Z]*?PRIVATE KEY-----" \
"$TARGET_DIR"

# Signed storage URLs
grep -Pir "storage.googleapis.com.*?Goog-Signature=[a-f0-9]+" \
"$TARGET_DIR"

# Signed policy documents in HTML
grep -Pzr '(?s)<form action.*?googleapis.com.*?name="signature" value=".*?">' \
"$TARGET_DIR"

参考

支持 HackTricks

Last updated