GCP - Персистенція токенів
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Автентифіковані токени користувача
Щоб отримати поточний токен користувача, можна виконати:
Отримати access token з бази даних SQLite
```bash sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='Перевірте на цій сторінці, як безпосередньо використовувати цей token за допомогою gcloud:
Щоб отримати деталі для generate a new access token виконайте:
Get refresh token from SQLite database
```bash sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='Також можна знайти refresh tokens в $HOME/.config/gcloud/application_default_credentials.json та в $HOME/.config/gcloud/legacy_credentials/*/adc.json.
Щоб отримати новий access token за допомогою refresh token, client ID та client secret, виконайте:
Отримати новий access token, використовуючи refresh token
```bash curl -s --data client_id=Дійсність refresh tokens можна керувати в Admin > Security > Google Cloud session control, і за замовчуванням вона встановлена на 16h, хоча можна встановити never expire:
.png)
Потік автентифікації
Потік автентифікації при використанні, наприклад, gcloud auth login, відкриває підказку в браузері, і після підтвердження всіх scopes браузер відправить запит, подібний до цього, на 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 використає state і code разом із захардкодженим client_id (32555940559.apps.googleusercontent.com) та client_secret (ZmssLNjJy2998hD4CTg2ejr2) щоб отримати кінцеві дані refresh token.
Caution
Зауважте, що зв’язок з localhost відбувається через HTTP, тому можливо перехопити дані, щоб отримати refresh token; однак ці дані дійсні лише 1 раз, тож це марно — простіше просто прочитати refresh token з файлу.
OAuth Scopes
Ви можете знайти всі Google scopes в https://developers.google.com/identity/protocols/oauth2/scopes або отримати їх виконуючи:
Отримати всі Google OAuth scopes
```bash curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u ```Можна побачити, які scopes може підтримувати застосунок, який gcloud використовує для аутентифікації, за допомогою цього скрипта:
Перевірити підтримувані scopes для 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
it’s interesting to see how this app supports the drive scope, which could allow a user to escalate from GCP to Workspace if an attacker manages to force the user to generate a token with this scope.
Перегляньте, як abuse this here.
Сервісні облікові записи
Так само, як і з аутентифікованими користувачами, якщо вам вдасться компрометувати файл приватного ключа сервісного облікового запису, ви зазвичай зможете отримувати доступ до нього скільки завгодно.
Однак, якщо ви викрадете OAuth token сервісного облікового запису, це може бути ще цікавіше, тому що, навіть якщо за замовчуванням ці токени придатні лише протягом години, якщо жертва видалить приватний api key, OAuh token will still be valid until it expires.
Метадані
Очевидно, поки ви перебуваєте на машині, що працює в середовищі GCP, ви зможете отримати доступ до сервісного облікового запису, прив’язаного до цієї машини, звертаючись до metadata endpoint (зауважте, що Oauth tokens, які ви можете отримати через цей endpoint, зазвичай обмежені scopes).
Рекомендації
Деякі рекомендації щодо усунення цих технік пояснені в 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-2
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud

