Az - PostgreSQL Privesc

Reading time: 4 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

PostgreSQL Privesc

Для отримання додаткової інформації про SQL Database перегляньте:

Az - PostgreSQL

Microsoft.DBforPostgreSQL/flexibleServers/read && Microsoft.DBforPostgreSQL/flexibleServers/write

З цією дозволом ви можете створювати, оновлювати або видаляти екземпляри PostgreSQL Flexible Server на Azure. Це включає в себе постачання нових серверів, модифікацію існуючих конфігурацій серверів або виведення серверів з експлуатації.

bash
az postgres flexible-server create \
--name <ServerName> \
--resource-group <ResourceGroupName> \
--location <Location> \
--admin-user <AdminUsername> \
--admin-password <AdminPassword> \
--sku-name <SkuName> \
--storage-size <StorageSizeInGB> \
--tier <PricingTier> \
--version <PostgreSQLVersion>

Ці дозволи дозволяють змінювати пароль PostgreSQL, що, звичайно, корисно у випадку, якщо автентифікація PostgreSQL увімкнена.

bash
az postgres flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>

Крім того, з правами ви можете активувати призначену ідентичність, працюючи з керованою ідентичністю, прикріпленою до сервера. Тут ви можете знайти всі розширення, які підтримує Azure PostgreSQL flexible server https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/reference-extensions. Щоб мати можливість використовувати ці розширення, потрібно змінити деякі параметри сервера (azure.extensions). Наприклад, тут з керованою ідентичністю, яка може отримати доступ до Azure Storage:

Спочатку ми змінюємо параметри і переконуємося, що призначена ідентичність активована:

bash
az postgres flexible-server parameter set \
--resource-group <YourResourceGroupName> \
--server-name <YourServerName> \
--name azure.extensions \
--value "AZURE_STORAGE"

az postgres flexible-server identity update \
--resource-group <YourResourceGroupName> \
--server-name <YourServerName> \
--system-assigned Enabled
sql

CREATE EXTENSION IF NOT EXISTS azure_storage;

CREATE EXTERNAL DATA SOURCE ManagedIdentity

SELECT azure_storage.account_add('<storage-account>', '<storage-key>');

SELECT *
FROM azure_storage.blob_get(
'<storage-account>',
'<container>',
'message.txt',
decoder := 'text'
) AS t(content text)
LIMIT 1;

Додатково необхідно увімкнути публічний доступ, якщо ви хочете отримати доступ з непри приватного кінцевого пункту, щоб увімкнути це:

bash
az postgres flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled

Microsoft.DBforPostgreSQL/flexibleServers/read, Microsoft.DBforPostgreSQL/flexibleServers/write, Microsoft.DBforPostgreSQL/flexibleServers/backups/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action

З цими дозволами ви можете відновити сервер з резервної копії за допомогою:

bash
az postgres flexible-server restore \
--resource-group <RESOURCE_GROUP> \
--name <NEW_SERVER_NAME> \
--source-server <SOURCE_SERVER_NAME> \
--restore-time "<ISO8601_TIMESTAMP>" \
--yes

Microsoft.DBforPostgreSQL/flexibleServers/read, Microsoft.DBforPostgreSQL/flexibleServers/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action, Microsoft.DBforPostgreSQL/flexibleServers/administrators/write && Microsoft.DBforPostgreSQL/flexibleServers/administrators/read

З цією дозволом ви можете налаштувати адміністраторів Azure Active Directory (AD) для PostgreSQL Flexible Server. Це можна використати, встановивши себе або інший обліковий запис як адміністратора AD, що надає повний адміністративний контроль над сервером PostgreSQL. Оновлення існуючого принципала поки що не підтримується, тому, якщо він вже створений, ви повинні спочатку видалити його.

Важливо, щоб у flexible-server були призначені керовані ідентичності для використання.

bash
az postgres flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--display-name <ADAdminDisplayName> \
--identity <IdentityNameOrID> \
--object-id <ObjectID>

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