# Az - SQL {{#include ../../../banners/hacktricks-training.md}} ## Azure SQL Azure SQL es una familia de productos gestionados, seguros e inteligentes que utilizan el **motor de base de datos SQL Server en la nube de Azure**. Esto significa que no tienes que preocuparte por la administración física de tus servidores, y puedes concentrarte en gestionar tus datos. Azure SQL consta de tres ofertas principales: 1. **Azure SQL Database**: Este es un **servicio de base de datos completamente gestionado**, que te permite alojar bases de datos individuales en la nube de Azure. Ofrece inteligencia incorporada que aprende tus patrones únicos de base de datos y proporciona recomendaciones personalizadas y ajuste automático. 2. **Azure SQL Managed Instance**: Esto es para implementaciones a gran escala, de toda la instancia de SQL Server. Proporciona casi un 100% de compatibilidad con el motor de base de datos SQL Server en las instalaciones (Edición Enterprise), que ofrece una implementación nativa de red virtual (VNet) que aborda preocupaciones comunes de seguridad, y un modelo de negocio favorable para los clientes de SQL Server en las instalaciones. 3. **Azure SQL Server en Azure VMs**: Esto es Infraestructura como Servicio (IaaS) y es mejor para migraciones donde deseas **control sobre el sistema operativo y la instancia de SQL Server**, como si fuera un servidor que se ejecuta en las instalaciones. ### Azure SQL Database **Azure SQL Database** es una **plataforma de base de datos completamente gestionada como servicio (PaaS)** que proporciona soluciones de bases de datos relacionales escalables y seguras. Está construida sobre las últimas tecnologías de SQL Server y elimina la necesidad de gestión de infraestructura, lo que la convierte en una opción popular para aplicaciones basadas en la nube. #### Características Clave - **Siempre Actualizado**: Se ejecuta en la última versión estable de SQL Server y recibe nuevas características y parches automáticamente. - **Capacidades PaaS**: Alta disponibilidad, copias de seguridad y actualizaciones integradas. - **Flexibilidad de Datos**: Soporta datos relacionales y no relacionales (por ejemplo, gráficos, JSON, espacial y XML). #### Modelos de Compra / Niveles de Servicio - **Basado en vCore**: Elige computación, memoria y almacenamiento de forma independiente. Para Propósito General, Crítico para Negocios (con alta resiliencia y rendimiento para aplicaciones OLTP), y escala hasta 128 TB de almacenamiento. - **Basado en DTU**: Agrupa computación, memoria y E/S en niveles fijos. Recursos equilibrados para tareas comunes. - Estándar: Recursos equilibrados para tareas comunes. - Premium: Alto rendimiento para cargas de trabajo exigentes. #### Modelos de Implementación Azure SQL Database soporta opciones de implementación flexibles para satisfacer diversas necesidades: - **Base de Datos Única**: - Una base de datos completamente aislada con sus propios recursos dedicados. - Ideal para microservicios o aplicaciones que requieren una única fuente de datos. - **Grupo Elástico**: - Permite que múltiples bases de datos compartan recursos dentro de un grupo. - Eficiente en costos para aplicaciones con patrones de uso fluctuantes a través de múltiples bases de datos. #### Rendimiento escalable y grupos - **Bases de Datos Únicas**: Cada base de datos está aislada y tiene sus propios recursos dedicados de computación, memoria y almacenamiento. Los recursos pueden escalarse dinámicamente (hacia arriba o hacia abajo) sin tiempo de inactividad (1–128 vCores, 32 GB–4 TB de almacenamiento, y hasta 128 TB). - **Grupos Elásticos**: Comparte recursos entre múltiples bases de datos en un grupo para maximizar la eficiencia y ahorrar costos. Los recursos también pueden escalarse dinámicamente para todo el grupo. - **Flexibilidad de Nivel de Servicio**: Comienza pequeño con una base de datos única en el nivel de Propósito General. Mejora a niveles Críticos para Negocios o Hyperscale a medida que crecen las necesidades. - **Opciones de Escalado**: Escalado Dinámico o Alternativas de Autoscalado. #### Monitoreo y Optimización Integrados - **Query Store**: Rastrea problemas de rendimiento, identifica los principales consumidores de recursos y ofrece recomendaciones prácticas. - **Ajuste Automático**: Optimiza proactivamente el rendimiento con características como indexación automática y correcciones de planes de consulta. - **Integración de Telemetría**: Soporta monitoreo a través de Azure Monitor, Event Hubs o Azure Storage para obtener información personalizada. #### Recuperación ante Desastres y Disponibilidad - **Copias de seguridad automáticas**: SQL Database realiza automáticamente copias de seguridad completas, diferenciales y de registro de transacciones de las bases de datos. - **Restauración a un Punto en el Tiempo**: Recupera bases de datos a cualquier estado anterior dentro del período de retención de copias de seguridad. - **Geo-Redundancia** - **Grupos de Conmutación por Error**: Simplifica la recuperación ante desastres agrupando bases de datos para conmutación automática entre regiones. ### Azure SQL Managed Instance **Azure SQL Managed Instance** es un motor de base de datos como Servicio (PaaS) que ofrece casi un 100% de compatibilidad con SQL Server y maneja automáticamente la mayoría de las tareas de gestión (por ejemplo, actualizaciones, parches, copias de seguridad, monitoreo). Proporciona una solución en la nube para migrar bases de datos de SQL Server en las instalaciones con cambios mínimos. #### Niveles de Servicio - **Propósito General**: Opción rentable para aplicaciones con requisitos estándar de E/S y latencia. - **Crítico para Negocios**: Opción de alto rendimiento con baja latencia de E/S para cargas de trabajo críticas. #### Características de Seguridad Avanzadas * **Protección contra Amenazas**: Alertas de Protección Avanzada contra Amenazas para actividades sospechosas y ataques de inyección SQL. Auditoría para rastrear y registrar eventos de base de datos para cumplimiento. * **Control de Acceso**: Autenticación de Microsoft Entra para gestión centralizada de identidades. Seguridad a Nivel de Fila y Enmascaramiento Dinámico de Datos para control de acceso granular. * **Copias de Seguridad**: Copias de seguridad automatizadas y manuales con capacidad de restauración a un punto en el tiempo. ### Azure SQL Virtual Machines **Azure SQL Virtual Machines** es mejor para migraciones donde deseas **control sobre el sistema operativo y la instancia de SQL Server**, como si fuera un servidor que se ejecuta en las instalaciones. Puede tener diferentes tamaños de máquina y una amplia selección de versiones y ediciones de SQL Server. #### Características Clave **Copia de Seguridad Automatizada**: Programa copias de seguridad para bases de datos SQL. **Patching Automático**: Automatiza la instalación de actualizaciones de Windows y SQL Server durante una ventana de mantenimiento. **Integración con Azure Key Vault**: Configura automáticamente Key Vault para VMs de SQL Server. **Integración con Defender for Cloud**: Ver recomendaciones de Defender for SQL en el portal. **Flexibilidad de Versión/Edición**: Cambia la versión o metadatos de edición de SQL Server sin redeplegar la VM. #### Características de Seguridad **Microsoft Defender for SQL**: Información y alertas de seguridad. **Integración con Azure Key Vault**: Almacenamiento seguro de credenciales y claves de cifrado. **Microsoft Entra (Azure AD)**: Autenticación y control de acceso. ## Enumeración {{#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}} ### Conectar y ejecutar consultas SQL Podrías encontrar una cadena de conexión (que contiene credenciales) del ejemplo [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;' ``` También puedes usar sqlcmd para acceder a la base de datos. Es importante saber si el servidor permite conexiones públicas `az sql server show --name --resource-group `, y también si la regla del firewall permite que nuestra IP acceda: ```powershell sqlcmd -S .database.windows.net -U -P -d ``` ## Referencias - [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) ## Escalación de Privilegios {{#ref}} ../az-privilege-escalation/az-sql-privesc.md {{#endref}} ## Post Explotación {{#ref}} ../az-post-exploitation/az-sql-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}