GCP - Non-svc Persistance

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Ці техніки корисні, якщо ви якось скомпрометували деякі облікові дані GCP або машину, що працює в середовищі GCP.

Перехоплення токенів

Токени аутентифікованого користувача

Щоб отримати поточний токен користувача, ви можете виконати:

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>';"

Термін дії токенів оновлення можна керувати в Адміністратор > Безпека > Керування сеансами Google Cloud, і за замовчуванням він встановлений на 16 годин, хоча його можна встановити як ніколи не закінчується:

Потік автентифікації

Потік автентифікації при використанні чогось на зразок 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) для отримання даних остаточного оновлення токену.

Зверніть увагу, що спілкування з localhost відбувається через HTTP, тому можливо перехопити дані для отримання токену оновлення, проте ці дані дійсні лише 1 раз, тому це буде некорисно, легше просто прочитати токен оновлення з файлу.

Області OAuth

Ви можете знайти всі області Google за посиланням 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, якщо зловмисник змусить користувача згенерувати токен з цією областю.

Перевірте, як зловживати цим тут.

Облікові записи служб

Так само, як і з аутентифікованими користувачами, якщо вам вдасться скомпрометувати файл приватного ключа службового облікового запису, ви зможете отримати до нього доступ зазвичай стільки, скільки захочете. Однак, якщо ви вкрадете токен OAuth службового облікового запису, це може бути ще цікавіше, оскільки, навіть якщо за замовчуванням ці токени корисні лише протягом години, якщо жертва видалить приватний ключ API, токен OAuh залишиться дійсним до його закінчення.

Метадані

Очевидно, доки ви знаходитесь всередині машини, що працює в середовищі GCP, ви зможете отримати доступ до облікового запису служби, приєднаного до цієї машини, звернувшись до кінцевої точки метаданих (зауважте, що токени Oauth, до яких ви можете отримати доступ в цій кінцевій точці, зазвичай обмежені областями).

Виправлення

Деякі виправлення для цих технік пояснені за посиланням https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated