# Az - SQL {{#include ../../../banners/hacktricks-training.md}} ## Azure SQL Azure SQL è una famiglia di prodotti gestiti, sicuri e intelligenti che utilizzano il **motore di database SQL Server nel cloud Azure**. Ciò significa che non devi preoccuparti dell'amministrazione fisica dei tuoi server e puoi concentrarti sulla gestione dei tuoi dati. Azure SQL consiste in tre principali offerte: 1. **Azure SQL Database**: Questo è un **servizio di database completamente gestito**, che ti consente di ospitare database individuali nel cloud Azure. Offre intelligenza integrata che apprende i tuoi modelli unici di database e fornisce raccomandazioni personalizzate e ottimizzazione automatica. 2. **Azure SQL Managed Instance**: Questo è per implementazioni su larga scala, a livello di intera istanza SQL Server. Fornisce quasi il 100% di compatibilità con l'ultima versione del motore di database SQL Server on-premises (Enterprise Edition), che offre un'implementazione nativa della rete virtuale (VNet) che affronta le comuni preoccupazioni di sicurezza, e un modello di business favorevole per i clienti SQL Server on-premises. 3. **Azure SQL Server su Azure VMs**: Questo è Infrastructure as a Service (IaaS) ed è migliore per le migrazioni in cui desideri **controllo sul sistema operativo e sull'istanza SQL Server**, come se fosse un server in esecuzione on-premises. ### Azure SQL Database **Azure SQL Database** è una **piattaforma di database completamente gestita come servizio (PaaS)** che fornisce soluzioni di database relazionali scalabili e sicure. È costruita sulle ultime tecnologie SQL Server ed elimina la necessità di gestione dell'infrastruttura, rendendola una scelta popolare per le applicazioni basate su cloud. #### Caratteristiche principali - **Sempre aggiornato**: Funziona sull'ultima versione stabile di SQL Server e riceve automaticamente nuove funzionalità e patch. - **Capacità PaaS**: Alta disponibilità integrata, backup e aggiornamenti. - **Flessibilità dei dati**: Supporta dati relazionali e non relazionali (ad es., grafi, JSON, spaziali e XML). #### Modelli di acquisto / Livelli di servizio - **Basato su vCore**: Scegli computazione, memoria e archiviazione in modo indipendente. Per uso generale, Business Critical (con alta resilienza e prestazioni per app OLTP), e scala fino a 128 TB di archiviazione. - **Basato su DTU**: Raggruppa computazione, memoria e I/O in livelli fissi. Risorse bilanciate per compiti comuni. - Standard: Risorse bilanciate per compiti comuni. - Premium: Alte prestazioni per carichi di lavoro esigenti. #### Modelli di distribuzione Azure SQL Database supporta opzioni di distribuzione flessibili per soddisfare varie esigenze: - **Database singolo**: - Un database completamente isolato con le proprie risorse dedicate. - Ottimo per microservizi o applicazioni che richiedono una singola fonte di dati. - **Elastic Pool**: - Consente a più database di condividere risorse all'interno di un pool. - Economico per applicazioni con modelli di utilizzo fluttuanti tra più database. #### Prestazioni scalabili e pool - **Database singoli**: Ogni database è isolato e ha le proprie risorse dedicate di computazione, memoria e archiviazione. Le risorse possono essere scalate dinamicamente (su o giù) senza tempi di inattività (1–128 vCores, 32 GB–4 TB di archiviazione, e fino a 128 TB). - **Elastic Pools**: Condividono risorse tra più database in un pool per massimizzare l'efficienza e risparmiare costi. Le risorse possono anche essere scalate dinamicamente per l'intero pool. - **Flessibilità del livello di servizio**: Inizia in piccolo con un database singolo nel livello di uso generale. Aggiorna a livelli Business Critical o Hyperscale man mano che le esigenze crescono. - **Opzioni di scalabilità**: Scalabilità dinamica o alternative di autoscalabilità. #### Monitoraggio e ottimizzazione integrati - **Query Store**: Monitora i problemi di prestazioni, identifica i principali consumatori di risorse e offre raccomandazioni pratiche. - **Ottimizzazione automatica**: Ottimizza proattivamente le prestazioni con funzionalità come indicizzazione automatica e correzioni del piano di query. - **Integrazione della telemetria**: Supporta il monitoraggio tramite Azure Monitor, Event Hubs o Azure Storage per approfondimenti personalizzati. #### Recupero da disastri e disponibilità - **Backup automatici**: SQL Database esegue automaticamente backup completi, differenziali e di log delle transazioni dei database. - **Ripristino a un punto nel tempo**: Recupera i database a qualsiasi stato passato all'interno del periodo di retention dei backup. - **Geo-Redundancy** - **Gruppi di failover**: Semplifica il recupero da disastri raggruppando i database per failover automatico tra le regioni. ### Azure SQL Managed Instance **Azure SQL Managed Instance** è un motore di database Platform as a Service (PaaS) che offre quasi il 100% di compatibilità con SQL Server e gestisce automaticamente la maggior parte dei compiti di gestione (ad es., aggiornamenti, patching, backup, monitoraggio). Fornisce una soluzione cloud per la migrazione dei database SQL Server on-premises con minime modifiche. #### Livelli di servizio - **Uso generale**: Opzione economica per applicazioni con requisiti standard di I/O e latenza. - **Business Critical**: Opzione ad alte prestazioni con bassa latenza I/O per carichi di lavoro critici. #### Caratteristiche avanzate di sicurezza * **Protezione dalle minacce**: Avvisi di protezione avanzata dalle minacce per attività sospette e attacchi di SQL injection. Audit per monitorare e registrare eventi del database per la conformità. * **Controllo degli accessi**: Autenticazione Microsoft Entra per la gestione centralizzata dell'identità. Sicurezza a livello di riga e mascheramento dinamico dei dati per un controllo degli accessi granulare. * **Backup**: Backup automatici e manuali con capacità di ripristino a un punto nel tempo. ### Azure SQL Virtual Machines **Azure SQL Virtual Machines** è migliore per le migrazioni in cui desideri **controllo sul sistema operativo e sull'istanza SQL Server**, come se fosse un server in esecuzione on-premises. Può avere diverse dimensioni di macchina e una vasta selezione di versioni e edizioni di SQL Server. #### Caratteristiche principali **Backup automatico**: Pianifica backup per i database SQL. **Patch automatiche**: Automatizza l'installazione degli aggiornamenti di Windows e SQL Server durante una finestra di manutenzione. **Integrazione con Azure Key Vault**: Configura automaticamente Key Vault per le VM SQL Server. **Integrazione con Defender for Cloud**: Visualizza le raccomandazioni di Defender for SQL nel portale. **Flessibilità di versione/edizione**: Cambia i metadati della versione o edizione di SQL Server senza ridistribuire la VM. #### Caratteristiche di sicurezza **Microsoft Defender for SQL**: Approfondimenti e avvisi di sicurezza. **Integrazione con Azure Key Vault**: Archiviazione sicura di credenziali e chiavi di crittografia. **Microsoft Entra (Azure AD)**: Autenticazione e controllo degli accessi. ## Enumerazione {{#tabs}} {{#tab name="az cli"}} ```bash # List Servers az sql server list # --output table ## List Server Usages az sql server list-usages --name --resource-group ## List Server Firewalls az sql server firewall-rule list --resource-group --server ## List of Azure Active Directory administrators in a server. az sql server ad-admin list --resource-group --server ## Gets an advanced threat protection az sql server advanced-threat-protection-setting show --resource-group --name ## Get server's auditing policy. az sql server audit-policy show --resource-group --name ## Gets a server's secure connection policy. az sql server conn-policy show --resource-group --server ## Gets a list of server DNS aliases for a server. az sql server dns-alias list --resource-group --server ## List of server keys. az sql server key list --resource-group --server ## Gets a server encryption protector. az sql server tde-key show --resource-group --server # List Databases in a SQL server az sql db list --server --resource-group #--output table ## Get details of a specific database az sql db show --name --server --resource-group ## List database usages az sql db list-usages --name --server --resource-group ## List of operations performed on the database. az sql db op list --database --server --resource-group ## List sql database classification az sql db classification list --name --server --resource-group ## List long-term retention backups for a SQL database az sql db ltr-backup list --database --server --resource-group ## List long-term retention policy az sql db ltr-policy --name --server --resource-group ## List long-term retention policy az sql db str-policy --name --server --resource-group ## List the replicas of a database and their replication status az sql db replica list-links --name --server --resource-group ## List deleted SQL databases az sql db list-deleted --server --resource-group ## List database usages az sql db list-usages --name --server --resource-group ## List restorable dropped databases in a SQL server az sql db list-deleted --server --resource-group ## List advanced threat protection setting show az sql db advanced-threat-protection-setting --name --server --resource-group # List all elastic pools in a SQL server az sql elastic-pool list --server --resource-group #--output table ## List all databases in a specific elastic pool az sql elastic-pool show --name --server --resource-group ## List of databases in an elastic pool. az sql elastic-pool list-dbs --name --server --resource-group # List all managed Instances az sql mi list az sql mi show --resource-group --name az sql midb list az sql midb show --resource-group --name # Lis all sql VM az sql vm list az sql vm show --resource-group --name ``` {{#endtab}} {{#tab name="Az PowerShell"}} ```powershell # List Servers Get-AzSqlServer -ResourceGroupName "" # List All Databases in a SQL Server Get-AzSqlDatabase -ServerName "" -ResourceGroupName "" # Get Details of a Specific Database Get-AzSqlDatabase -Name "" -ServerName "" -ResourceGroupName "" # List Operations Performed on the Database Get-AzSqlDatabaseActivity -DatabaseName "" -ServerName "" -ResourceGroupName "" # List SQL Database Classification Get-AzSqlDatabaseSensitivityClassification -DatabaseName "" -ServerName "" -ResourceGroupName "" # List Long-Term Retention Backups for a SQL Database Get-AzSqlDatabaseLongTermRetentionBackup -ResourceGroupName "" -Location "" # List Replicas of a Database and Their Replication Status Get-AzSqlDatabaseReplicationLink -DatabaseName "" -ServerName "" -ResourceGroupName "" # List Deleted SQL Databases Get-AzSqlDeletedDatabaseBackup -ServerName "" -ResourceGroupName "" # List All Elastic Pools in a SQL Server Get-AzSqlElasticPool -ServerName "" -ResourceGroupName "" # List All Databases in a Specific Elastic Pool Get-AzSqlElasticPoolDatabase -ElasticPoolName "" -ServerName "" -ResourceGroupName "" # List all managed Instances Get-AzSqlInstance Get-AzSqlInstance -ResourceGroupName -Name # List All Databases in a SQL Managed Instance Get-AzSqlInstanceDatabase -ResourceGroupName -InstanceName # Lis all sql VM Get-AzSqlVM ``` {{#endtab}} {{#endtabs}} ### Connettersi ed eseguire query SQL Potresti trovare una stringa di connessione (contenente credenziali) dall'esempio [enumerando un Az WebApp](az-app-services.md): ```powershell 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;' ``` Puoi anche usare sqlcmd per accedere al database. È importante sapere se il server consente connessioni pubbliche `az sql server show --name --resource-group `, e anche se la regola del firewall consente al nostro IP di accedere: ```powershell sqlcmd -S .database.windows.net -U -P -d ``` ## Riferimenti - [https://learn.microsoft.com/en-us/azure/azure-sql/azure-sql-iaas-vs-paas-what-is-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/azure-sql-iaas-vs-paas-what-is-overview?view=azuresql) - [https://learn.microsoft.com/en-us/azure/azure-sql/database/single-database-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/database/single-database-overview?view=azuresql) - [https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview?view=azuresql) - [https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/sql-server-on-azure-vm-iaas-what-is-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/sql-server-on-azure-vm-iaas-what-is-overview?view=azuresql) ## Escalation dei privilegi {{#ref}} ../az-privilege-escalation/az-sql-privesc.md {{#endref}} ## Post Sfruttamento {{#ref}} ../az-post-exploitation/az-sql-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}