# 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.
```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>
```
Byvoorbeeld, hierdie toestemmings laat die verandering van die PostgreSQL wagwoord toe, nuttig natuurlik in die geval dat PostgreSQL outentisering geaktiveer is.
```bash
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](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:
```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;

```
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:
```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`

Met hierdie toestemmings kan jy 'n bediener van 'n rugsteun herstel met:
```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`

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.
```bash
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}}
