Az - PostgreSQL Privesc

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

PostgreSQL Privesc

Aby uzyskać więcej informacji na temat SQL Database, sprawdź:

Az - PostgreSQL

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

Dzięki temu uprawnieniu możesz tworzyć, aktualizować lub usuwać instancje PostgreSQL Flexible Server na Azure. Obejmuje to provisionowanie nowych serwerów, modyfikowanie istniejących konfiguracji serwerów lub wycofywanie serwerów.

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>

Na przykład, te uprawnienia pozwalają na zmianę hasła PostgreSQL, co jest przydatne w przypadku, gdy uwierzytelnianie PostgreSQL jest włączone.

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

Ponadto, z uprawnieniami możesz włączyć przypisaną tożsamość i operować z zarządzaną tożsamością przypisaną do serwera. Tutaj możesz znaleźć wszystkie rozszerzenia, które obsługuje Azure PostgreSQL flexible server https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/reference-extensions. Aby móc korzystać z tych rozszerzeń, niektóre parametry serwera (azure.extensions) muszą zostać zmienione. Na przykład tutaj z zarządzaną tożsamością, która ma dostęp do Azure Storage:

Najpierw zmieniamy parametry i upewniamy się, że przypisana tożsamość jest włączona:

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

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;

Dodatkowo konieczne jest włączenie dostępu publicznego, jeśli chcesz uzyskać dostęp z punktu końcowego, który nie jest prywatny. Aby to włączyć:

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

Z tymi uprawnieniami możesz przywrócić serwer z kopii zapasowej za pomocą:

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

Dzięki temu uprawnieniu możesz skonfigurować administratorów Azure Active Directory (AD) dla elastycznego serwera PostgreSQL. Można to wykorzystać, ustawiając siebie lub inne konto jako administratora AD, co daje pełną kontrolę administracyjną nad serwerem PostgreSQL. Aktualizacja istniejącego głównego konta nie jest jeszcze obsługiwana, więc jeśli takie zostało utworzone, musisz je najpierw usunąć.

Ważne jest, aby elastyczny serwer miał przypisane zarządzane tożsamości użytkowników do użycia.

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

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks