Files
hacktricks-cloud/src/pentesting-cloud/azure-security/az-services/az-sql.md

14 KiB
Raw Blame History

Az - SQL

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

Azure SQL

Azure SQL je porodica upravljanih, sigurnih i inteligentnih proizvoda koji koriste SQL Server bazu podataka u Azure cloud-u. To znači da ne morate brinuti o fizičkom upravljanju vašim serverima, a možete se fokusirati na upravljanje vašim podacima.

Azure SQL se sastoji od tri glavne ponude:

  1. Azure SQL Database: Ovo je potpuno upravljana usluga baze podataka, koja vam omogućava da hostujete pojedinačne baze podataka u Azure cloud-u. Nudi ugrađenu inteligenciju koja uči vaše jedinstvene obrasce baze podataka i pruža prilagođene preporuke i automatsko podešavanje.
  2. Azure SQL Managed Instance: Ovo je za veće, celokupne SQL Server instance. Pruža skoro 100% kompatibilnost sa najnovijom SQL Server on-premises (Enterprise Edition) bazom podataka, koja nudi nativnu implementaciju virtuelne mreže (VNet) koja rešava uobičajene sigurnosne probleme, i poslovni model povoljan za on-premises SQL Server korisnike.
  3. Azure SQL Server na Azure VMs: Ovo je infrastruktura kao usluga (IaaS) i najbolje je za migracije gde želite kontrolu nad operativnim sistemom i SQL Server instancom, kao da je to server koji radi on-premises.

Azure SQL Database

Azure SQL Database je potpuno upravljana platforma baze podataka kao usluga (PaaS) koja pruža skalabilna i sigurna rešenja za relacione baze podataka. Izgrađena je na najnovijim SQL Server tehnologijama i eliminiše potrebu za upravljanjem infrastrukturom, što je čini popularnim izborom za aplikacije zasnovane na cloud-u.

Ključne karakteristike

  • Uvek ažurirano: Radi na najnovijoj stabilnoj verziji SQL Server-a i automatski prima nove funkcije i zakrpe.
  • PaaS mogućnosti: Ugrađena visoka dostupnost, rezervne kopije i ažuriranja.
  • Fleksibilnost podataka: Podržava relacione i nerezidencijalne podatke (npr. grafove, JSON, prostorne i XML).

Modeli kupovine / Servisni nivoi

  • vCore-bazirano: Izaberite računarske resurse, memoriju i skladište nezavisno. Za opštu svrhu, poslovno kritične (sa visokom otpornosti i performansama za OLTP aplikacije), i skalira do 128 TB skladišta.
  • DTU-bazirano: Kombinuje računarske resurse, memoriju i I/O u fiksne nivoe. Izbalansirani resursi za uobičajene zadatke.
  • Standard: Izbalansirani resursi za uobičajene zadatke.
  • Premium: Visoke performanse za zahtevne radne opterećenja.

Modeli implementacije

Azure SQL Database podržava fleksibilne opcije implementacije kako bi zadovoljila različite potrebe:

  • Jedna baza podataka:
  • Potpuno izolovana baza podataka sa sopstvenim posvećenim resursima.
  • Odlično za mikroservise ili aplikacije koje zahtevaju jedan izvor podataka.
  • Elastični bazen:
  • Omogućava više baza podataka da dele resurse unutar bazena.
  • Ekonomično za aplikacije sa promenljivim obrascima korišćenja kroz više baza podataka.

Skalabilne performanse i bazeni

  • Jedinstvene baze podataka: Svaka baza podataka je izolovana i ima svoje posvećene računarske resurse, memoriju i skladište. Resursi se mogu dinamički skalirati (gore ili dole) bez prekida rada (1128 vCores, 32 GB4 TB skladišta, i do 128 TB).
  • Elastični bazeni: Deli resurse između više baza podataka u bazenu kako bi se maksimizovala efikasnost i uštedeli troškovi. Resursi se takođe mogu dinamički skalirati za ceo bazen.
  • Fleksibilnost servisnog nivoa: Počnite sa malom jedinstvenom bazom podataka u opštem nivou. Nadogradite na poslovno kritične ili hiperskalne nivoe kako potrebe rastu.
  • Opcije skaliranja: Dinamičko skaliranje ili alternativne automatske skalacije.

Ugrađeno praćenje i optimizacija

  • Query Store: Prati probleme sa performansama, identifikuje glavne potrošače resursa i nudi akcione preporuke.
  • Automatsko podešavanje: Proaktivno optimizuje performanse sa funkcijama kao što su automatsko indeksiranje i ispravke plana upita.
  • Integracija telemetrije: Podržava praćenje putem Azure Monitor-a, Event Hubs-a ili Azure Storage-a za prilagođene uvide.

Oporavak od katastrofa i dostupnost

  • Automatske rezervne kopije: SQL Database automatski vrši pune, diferencijalne i rezervne kopije transakcionih logova baza podataka.
  • Obnova tačke u vremenu: Oporavite baze podataka na bilo koje prethodno stanje unutar perioda zadržavanja rezervnih kopija.
  • Geo-redundantnost
  • Grupe za prebacivanje: P pojednostavljuje oporavak od katastrofa grupisanjem baza podataka za automatsko prebacivanje između regiona.

Azure SQL Managed Instance

Azure SQL Managed Instance je platforma kao usluga (PaaS) koja nudi skoro 100% kompatibilnost sa SQL Server-om i automatski obavlja većinu upravljačkih zadataka (npr. nadogradnje, zakrpe, rezervne kopije, praćenje). Pruža cloud rešenje za migraciju on-premises SQL Server baza podataka uz minimalne promene.

Servisni nivoi

  • Opšta svrha: Ekonomična opcija za aplikacije sa standardnim I/O i latencijskim zahtevima.
  • Poslovno kritično: Opcija visoke performanse sa niskom I/O latencijom za kritična radna opterećenja.

Napredne sigurnosne karakteristike

  • Zaštita od pretnji: Napredna zaštita od pretnji upozorava na sumnjive aktivnosti i SQL injekcijske napade. Revizija za praćenje i beleženje događaja baze podataka radi usklađenosti.
  • Kontrola pristupa: Microsoft Entra autentifikacija za centralizovano upravljanje identitetom. Bezbednost na nivou reda i dinamičko maskiranje podataka za granularnu kontrolu pristupa.
  • Rezervne kopije: Automatske i ručne rezervne kopije sa mogućnošću obnavljanja tačke u vremenu.

Azure SQL Virtual Machines

Azure SQL Virtual Machines je najbolje za migracije gde želite kontrolu nad operativnim sistemom i SQL Server instancom, kao da je to server koji radi on-premises. Može imati različite veličine mašina i širok izbor verzija i izdanja SQL Server-a.

Ključne karakteristike

Automatska rezervna kopija: Planirajte rezervne kopije za SQL baze podataka.
Automatsko zakrpljenje: Automatizuje instalaciju Windows i SQL Server ažuriranja tokom održavanja.
Integracija Azure Key Vault: Automatski konfiguriše Key Vault za SQL Server VMs.
Integracija Defender for Cloud: Prikazuje preporuke Defender for SQL u portalu.
Fleksibilnost verzije/izdanja: Promenite metapodatke verzije ili izdanja SQL Server-a bez ponovne implementacije VM-a.

Sigurnosne karakteristike

Microsoft Defender for SQL: Uvidi i upozorenja o sigurnosti.
Integracija Azure Key Vault: Sigurno skladištenje kredencijala i ključeva za enkripciju.
Microsoft Entra (Azure AD): Autentifikacija i kontrola pristupa.

Enumeracija

{{#tabs}} {{#tab name="az cli"}}

# List Servers
az sql server list # --output table
## List Server Usages
az sql server list-usages --name <server_name> --resource-group <resource_group>
## List Server Firewalls
az sql server firewall-rule list --resource-group <resource_group> --server <server_name>
## List of Azure Active Directory administrators in a server.
az sql server ad-admin list --resource-group <resource_group> --server <server_name>
## Gets an advanced threat protection
az sql server advanced-threat-protection-setting show --resource-group <resource_group> --name <server_name>
## Get server's auditing policy.
az sql server audit-policy show --resource-group <resource_group> --name <server_name>
## Gets a server's secure connection policy.
az sql server conn-policy show --resource-group <resource_group> --server <server_name>
## Gets a list of server DNS aliases for a server.
az sql server dns-alias list --resource-group <resource_group> --server <server_name>
## List of server keys.
az sql server key list --resource-group <resource_group> --server <server_name>
## Gets a server encryption protector.
az sql server tde-key show --resource-group <resource_group> --server <server_name>

# List Databases in a SQL server
az sql db list --server <server_name> --resource-group <resource_group> #--output table
## Get details of a specific database
az sql db show --name <database_name> --server <server_name> --resource-group <resource_group>
## List database usages
az sql db list-usages --name <database_name> --server <server_name> --resource-group <resource_group>
## List of operations performed on the database.
az sql db op list --database <database_name> --server <server_name> --resource-group <resource_group>
## List sql database classification
az sql db classification list --name <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention backups for a SQL database
az sql db ltr-backup list --database <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention policy
az sql db ltr-policy --name <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention policy
az sql db str-policy --name <database_name> --server <server_name> --resource-group <resource_group>
## List the replicas of a database and their replication status
az sql db replica list-links --name <database_name> --server <server_name> --resource-group <resource_group>
## List deleted SQL databases
az sql db list-deleted --server <server_name> --resource-group <resource_group>
## List database usages
az sql db list-usages --name <database_name> --server <server_name> --resource-group <resource_group>
## List restorable dropped databases in a SQL server
az sql db list-deleted --server <server_name> --resource-group <resource_group>
## List advanced threat protection setting show
az sql db advanced-threat-protection-setting --name <database_name> --server <server_name> --resource-group <resource_group>

# List all elastic pools in a SQL server
az sql elastic-pool list --server <server_name> --resource-group <resource_group> #--output table
## List all databases in a specific elastic pool
az sql elastic-pool show --name <elastic_pool_name>  --server <server_name> --resource-group <resource_group>
## List of databases in an elastic pool.
az sql elastic-pool list-dbs --name <elastic_pool_name>  --server <server_name> --resource-group <resource_group>

# List all managed Instances
az sql mi list
az sql mi show --resource-group <res-grp> --name <name>
az sql midb list
az sql midb show --resource-group <res-grp> --name <name>

# Lis all sql VM
az sql vm list
az sql vm show --resource-group <res-grp> --name <name>

{{#endtab}}

{{#tab name="Az PowerShell"}}

# List Servers
Get-AzSqlServer -ResourceGroupName "<resource-group-name>"

# List All Databases in a SQL Server
Get-AzSqlDatabase -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# Get Details of a Specific Database
Get-AzSqlDatabase -Name "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"

# List Operations Performed on the Database
Get-AzSqlDatabaseActivity -DatabaseName "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"

# List SQL Database Classification
Get-AzSqlDatabaseSensitivityClassification -DatabaseName "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"

# List Long-Term Retention Backups for a SQL Database
Get-AzSqlDatabaseLongTermRetentionBackup -ResourceGroupName "<resource_group>" -Location "<location>"
# List Replicas of a Database and Their Replication Status
Get-AzSqlDatabaseReplicationLink -DatabaseName "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List Deleted SQL Databases
Get-AzSqlDeletedDatabaseBackup -ServerName "<server_name>" -ResourceGroupName "<resource_group>"

# List All Elastic Pools in a SQL Server
Get-AzSqlElasticPool -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List All Databases in a Specific Elastic Pool
Get-AzSqlElasticPoolDatabase -ElasticPoolName "<elastic_pool_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"

# List all managed Instances
Get-AzSqlInstance
Get-AzSqlInstance -ResourceGroupName <ResourceGroupName> -Name <ManagedInstanceName>

# List All Databases in a SQL Managed Instance
Get-AzSqlInstanceDatabase -ResourceGroupName <ResourceGroupName> -InstanceName <ManagedInstanceName>

# Lis all sql VM
Get-AzSqlVM

{{#endtab}} {{#endtabs}}

Povežite se i izvršite SQL upite

Možete pronaći string za povezivanje (koji sadrži akreditive) iz primera enumerating an Az WebApp:

function invoke-sql{
param($query)
$Connection_string = "Server=tcp:supercorp.database.windows.net,1433;Initial Catalog=flag;Persist Security Info=False;User ID=db_read;Password=gAegH!324fAG!#1fht;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
$Connection = New-Object System.Data.SqlClient.SqlConnection $Connection_string
$Connection.Open()
$Command = New-Object System.Data.SqlClient.SqlCommand
$Command.Connection = $Connection
$Command.CommandText = $query
$Reader = $Command.ExecuteReader()
while ($Reader.Read()) {
$Reader.GetValue(0)
}
$Connection.Close()
}

invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;'

Možete takođe koristiti sqlcmd za pristup bazi podataka. Važno je znati da li server dozvoljava javne konekcije az sql server show --name <server-name> --resource-group <resource-group>, kao i da li pravilo vatrozida dozvoljava našem IP-u pristup:

sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>

Reference

Eskalacija privilegija

{{#ref}} ../az-privilege-escalation/az-sql-privesc.md {{#endref}}

Post Eksploatacija

{{#ref}} ../az-post-exploitation/az-sql-post-exploitation.md {{#endref}}

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