# Az - SQL {{#include ../../../banners/hacktricks-training.md}} ## Azure SQL Azure SQL ist eine Familie von verwalteten, sicheren und intelligenten Produkten, die die **SQL Server-Datenbank-Engine in der Azure-Cloud** verwenden. Das bedeutet, dass Sie sich nicht um die physische Verwaltung Ihrer Server kümmern müssen und sich auf die Verwaltung Ihrer Daten konzentrieren können. Azure SQL besteht aus drei Hauptangeboten: 1. **Azure SQL-Datenbank**: Dies ist ein **vollständig verwalteter Datenbankdienst**, der es Ihnen ermöglicht, einzelne Datenbanken in der Azure-Cloud zu hosten. Er bietet integrierte Intelligenz, die Ihre einzigartigen Datenbankmuster lernt und maßgeschneiderte Empfehlungen sowie automatische Optimierungen bereitstellt. 2. **Azure SQL Managed Instance**: Dies ist für größere, gesamte SQL Server-Instanz-Umsetzungen gedacht. Es bietet nahezu 100% Kompatibilität mit der neuesten SQL Server On-Premises (Enterprise Edition) Datenbank-Engine, die eine native Implementierung des virtuellen Netzwerks (VNet) bietet, die häufige Sicherheitsbedenken anspricht, und ein Geschäftsmodell, das für On-Premises SQL Server-Kunden vorteilhaft ist. 3. **Azure SQL Server auf Azure VMs**: Dies ist Infrastructure as a Service (IaaS) und eignet sich am besten für Migrationen, bei denen Sie **Kontrolle über das Betriebssystem und die SQL Server-Instanz** haben möchten, als ob es sich um einen Server handelt, der On-Premises läuft. ### Azure SQL-Datenbank **Azure SQL-Datenbank** ist eine **vollständig verwaltete Datenbankplattform als Dienst (PaaS)**, die skalierbare und sichere relationale Datenbanklösungen bietet. Sie basiert auf den neuesten SQL Server-Technologien und beseitigt die Notwendigkeit für Infrastrukturmanagement, was sie zu einer beliebten Wahl für cloudbasierte Anwendungen macht. #### Hauptmerkmale - **Immer auf dem neuesten Stand**: Läuft auf der neuesten stabilen Version von SQL Server und erhält automatisch neue Funktionen und Patches. - **PaaS-Funktionen**: Integrierte hohe Verfügbarkeit, Backups und Updates. - **Datenflexibilität**: Unterstützt relationale und nicht-relationale Daten (z. B. Grafiken, JSON, räumliche Daten und XML). #### Kaufmodelle / Dienstebenen - **vCore-basiert**: Wählen Sie Compute, Speicher und Speicher unabhängig. Für allgemeine Zwecke, geschäftskritisch (mit hoher Resilienz und Leistung für OLTP-Anwendungen) und bis zu 128 TB Speicher. - **DTU-basiert**: Bündelt Compute, Speicher und I/O in festen Ebenen. Ausgewogene Ressourcen für gängige Aufgaben. - Standard: Ausgewogene Ressourcen für gängige Aufgaben. - Premium: Hohe Leistung für anspruchsvolle Workloads. #### Bereitstellungsmodelle Azure SQL-Datenbank unterstützt flexible Bereitstellungsoptionen, um verschiedenen Bedürfnissen gerecht zu werden: - **Einzelne Datenbank**: - Eine vollständig isolierte Datenbank mit eigenen dedizierten Ressourcen. - Ideal für Microservices oder Anwendungen, die eine einzige Datenquelle benötigen. - **Elastischer Pool**: - Ermöglicht mehreren Datenbanken, Ressourcen innerhalb eines Pools zu teilen. - Kosten effizient für Anwendungen mit schwankenden Nutzungsmustern über mehrere Datenbanken. #### Skalierbare Leistung und Pools - **Einzelne Datenbanken**: Jede Datenbank ist isoliert und hat ihre eigenen dedizierten Compute-, Speicher- und Speicherressourcen. Ressourcen können dynamisch (hoch oder runter) ohne Ausfallzeiten skaliert werden (1–128 vCores, 32 GB–4 TB Speicher und bis zu 128 TB). - **Elastische Pools**: Teilen Sie Ressourcen über mehrere Datenbanken in einem Pool, um die Effizienz zu maximieren und Kosten zu sparen. Ressourcen können auch dynamisch für den gesamten Pool skaliert werden. - **Flexibilität der Dienstebene**: Beginnen Sie klein mit einer einzelnen Datenbank in der allgemeinen Zweckebene. Upgrade auf geschäftskritische oder Hyperscale-Ebenen, wenn die Bedürfnisse wachsen. - **Skalierungsoptionen**: Dynamische Skalierung oder Autoscaling-Alternativen. #### Eingebaute Überwachung & Optimierung - **Abfrage-Store**: Verfolgt Leistungsprobleme, identifiziert die Hauptressourcennutzer und bietet umsetzbare Empfehlungen. - **Automatische Optimierung**: Optimiert proaktiv die Leistung mit Funktionen wie automatischer Indizierung und Korrekturen von Abfrageplänen. - **Telemetrie-Integration**: Unterstützt die Überwachung über Azure Monitor, Event Hubs oder Azure Storage für maßgeschneiderte Einblicke. #### Notfallwiederherstellung & Verfügbarkeit - **Automatische Backups**: SQL-Datenbank führt automatisch vollständige, differenzielle und Transaktionsprotokoll-Backups von Datenbanken durch. - **Punkt-in-Zeit-Wiederherstellung**: Stellen Sie Datenbanken in jeden früheren Zustand innerhalb des Backup-Aufbewahrungszeitraums wieder her. - **Geo-Redundanz** - **Failover-Gruppen**: Vereinfacht die Notfallwiederherstellung, indem Datenbanken für automatisches Failover über Regionen gruppiert werden. ### Azure SQL Managed Instance **Azure SQL Managed Instance** ist eine Plattform als Dienst (PaaS) Datenbank-Engine, die nahezu 100% Kompatibilität mit SQL Server bietet und die meisten Verwaltungsaufgaben (z. B. Upgrade, Patchen, Backups, Überwachung) automatisch erledigt. Es bietet eine Cloud-Lösung für die Migration von On-Premises SQL Server-Datenbanken mit minimalen Änderungen. #### Dienstebenen - **Allgemeiner Zweck**: Kosten effektive Option für Anwendungen mit standardmäßigen I/O- und Latenzanforderungen. - **Geschäftskritisch**: Hochleistungsoption mit niedriger I/O-Latenz für kritische Workloads. #### Erweiterte Sicherheitsmerkmale * **Bedrohungsschutz**: Erweiterte Bedrohungsschutzwarnungen für verdächtige Aktivitäten und SQL-Injection-Angriffe. Auditing zur Verfolgung und Protokollierung von Datenbankereignissen zur Einhaltung. * **Zugriffskontrolle**: Microsoft Entra-Authentifizierung für zentrales Identitätsmanagement. Zeilenebene-Sicherheit und dynamische Datenmaskierung für granulare Zugriffskontrolle. * **Backups**: Automatisierte und manuelle Backups mit Punkt-in-Zeit-Wiederherstellungsfähigkeit. ### Azure SQL Virtuelle Maschinen **Azure SQL Virtuelle Maschinen** sind am besten für Migrationen geeignet, bei denen Sie **Kontrolle über das Betriebssystem und die SQL Server-Instanz** haben möchten, als ob es sich um einen Server handelt, der On-Premises läuft. Sie können unterschiedliche Maschinen Größen und eine große Auswahl an SQL Server-Versionen und -Editionen haben. #### Hauptmerkmale **Automatisiertes Backup**: Planen Sie Backups für SQL-Datenbanken. **Automatische Patchverwaltung**: Automatisiert die Installation von Windows- und SQL Server-Updates während eines Wartungsfensters. **Azure Key Vault-Integration**: Konfiguriert Key Vault automatisch für SQL Server-VMs. **Defender für Cloud-Integration**: Sehen Sie sich die Empfehlungen von Defender für SQL im Portal an. **Versions-/Edition-Flexibilität**: Ändern Sie die SQL Server-Version oder -Edition-Metadaten, ohne die VM neu bereitzustellen. #### Sicherheitsmerkmale **Microsoft Defender für SQL**: Sicherheitsinformationen und -warnungen. **Azure Key Vault-Integration**: Sichere Speicherung von Anmeldeinformationen und Verschlüsselungsschlüsseln. **Microsoft Entra (Azure AD)**: Authentifizierung und Zugriffskontrolle. ## Enumeration {{#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}} ### Verbinden und SQL-Abfragen ausführen Sie könnten eine Verbindungszeichenfolge (die Anmeldeinformationen enthält) aus dem Beispiel [Auflisten einer Az WebApp](az-app-services.md) finden: ```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;' ``` Sie können auch sqlcmd verwenden, um auf die Datenbank zuzugreifen. Es ist wichtig zu wissen, ob der Server öffentliche Verbindungen zulässt `az sql server show --name --resource-group `, und auch, ob die Firewallregel unsere IP den Zugriff erlaubt: ```powershell sqlcmd -S .database.windows.net -U -P -d ``` ## Referenzen - [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) ## Privilegieneskalation {{#ref}} ../az-privilege-escalation/az-sql-privesc.md {{#endref}} ## Post-Exploitation {{#ref}} ../az-post-exploitation/az-sql-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}