# Az - SQL {{#include ../../../banners/hacktricks-training.md}} ## Azure SQL Azure SQL은 **Azure 클라우드의 SQL Server 데이터베이스 엔진**을 사용하는 관리형, 안전하고 지능적인 제품군입니다. 이는 서버의 물리적 관리에 대해 걱정할 필요가 없으며, 데이터 관리에 집중할 수 있음을 의미합니다. Azure SQL은 세 가지 주요 제공 사항으로 구성됩니다: 1. **Azure SQL Database**: 이는 **완전 관리형 데이터베이스 서비스**로, Azure 클라우드에서 개별 데이터베이스를 호스팅할 수 있습니다. 고유한 데이터베이스 패턴을 학습하고 맞춤형 추천 및 자동 조정을 제공하는 내장 지능을 제공합니다. 2. **Azure SQL Managed Instance**: 이는 더 큰 규모의 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다. 최신 SQL Server 온프레미스(Enterprise Edition) 데이터베이스 엔진과 거의 100% 호환성을 제공하며, 일반적인 보안 문제를 해결하는 네이티브 가상 네트워크(VNet) 구현과 온프레미스 SQL Server 고객에게 유리한 비즈니스 모델을 제공합니다. 3. **Azure SQL Server on Azure VMs**: 이는 서비스로서의 인프라(IaaS)이며, 온프레미스에서 실행되는 서버처럼 **운영 체제 및 SQL Server 인스턴스에 대한 제어**를 원하는 마이그레이션에 가장 적합합니다. ### Azure SQL Database **Azure SQL Database**는 **완전 관리형 데이터베이스 플랫폼으로서의 서비스(PaaS)**로, 확장 가능하고 안전한 관계형 데이터베이스 솔루션을 제공합니다. 최신 SQL Server 기술을 기반으로 하며, 인프라 관리의 필요성을 없애 클라우드 기반 애플리케이션에 인기 있는 선택이 됩니다. #### 주요 기능 - **항상 최신 상태**: 최신 안정 버전의 SQL Server에서 실행되며, 새로운 기능과 패치를 자동으로 받습니다. - **PaaS 기능**: 내장된 고가용성, 백업 및 업데이트. - **데이터 유연성**: 관계형 및 비관계형 데이터(예: 그래프, JSON, 공간 및 XML)를 지원합니다. #### 구매 모델 / 서비스 계층 - **vCore 기반**: 컴퓨팅, 메모리 및 스토리지를 독립적으로 선택합니다. 일반 목적, 비즈니스 크리티컬(OLTP 앱에 대한 높은 복원력 및 성능) 및 최대 128TB 스토리지로 확장됩니다. - **DTU 기반**: 컴퓨팅, 메모리 및 I/O를 고정 계층으로 묶습니다. 일반 작업에 대한 균형 잡힌 리소스. - 표준: 일반 작업에 대한 균형 잡힌 리소스. - 프리미엄: 요구가 많은 작업에 대한 높은 성능. #### 배포 모델 Azure SQL Database는 다양한 요구에 맞는 유연한 배포 옵션을 지원합니다: - **단일 데이터베이스**: - 전용 리소스를 가진 완전히 격리된 데이터베이스. - 마이크로서비스 또는 단일 데이터 소스가 필요한 애플리케이션에 적합합니다. - **엘라스틱 풀**: - 여러 데이터베이스가 풀 내에서 리소스를 공유할 수 있습니다. - 여러 데이터베이스에 걸쳐 변동하는 사용 패턴이 있는 애플리케이션에 비용 효율적입니다. #### 확장 가능한 성능 및 풀 - **단일 데이터베이스**: 각 데이터베이스는 격리되어 있으며 전용 컴퓨팅, 메모리 및 스토리지 리소스를 가집니다. 리소스는 다운타임 없이 동적으로(상향 또는 하향) 확장할 수 있습니다(1–128 vCores, 32GB–4TB 스토리지, 최대 128TB). - **엘라스틱 풀**: 여러 데이터베이스 간에 리소스를 공유하여 효율성을 극대화하고 비용을 절감합니다. 전체 풀에 대해 리소스도 동적으로 확장할 수 있습니다. - **서비스 계층 유연성**: 일반 목적 계층에서 단일 데이터베이스로 작게 시작합니다. 필요에 따라 비즈니스 크리티컬 또는 하이퍼스케일 계층으로 업그레이드합니다. - **확장 옵션**: 동적 확장 또는 자동 확장 대안. #### 내장 모니터링 및 최적화 - **쿼리 저장소**: 성능 문제를 추적하고, 주요 리소스 소비자를 식별하며, 실행 가능한 추천을 제공합니다. - **자동 조정**: 자동 인덱싱 및 쿼리 계획 수정과 같은 기능으로 성능을 사전 최적화합니다. - **텔레메트리 통합**: Azure Monitor, Event Hubs 또는 Azure Storage를 통한 모니터링을 지원하여 맞춤형 통찰력을 제공합니다. #### 재해 복구 및 가용성 - **자동 백업**: SQL Database는 데이터베이스의 전체, 차등 및 트랜잭션 로그 백업을 자동으로 수행합니다. - **시점 복원**: 백업 보존 기간 내의 과거 상태로 데이터베이스를 복구합니다. - **지리적 중복성** - **페일오버 그룹**: 지역 간 자동 페일오버를 위해 데이터베이스를 그룹화하여 재해 복구를 간소화합니다. ### Azure SQL Managed Instance **Azure SQL Managed Instance**는 SQL Server와 거의 100% 호환성을 제공하는 플랫폼으로서의 서비스(PaaS) 데이터베이스 엔진으로, 대부분의 관리 작업(예: 업그레이드, 패치, 백업, 모니터링)을 자동으로 처리합니다. 최소한의 변경으로 온프레미스 SQL Server 데이터베이스를 마이그레이션하기 위한 클라우드 솔루션을 제공합니다. #### 서비스 계층 - **일반 목적**: 표준 I/O 및 대기 시간 요구 사항이 있는 애플리케이션을 위한 비용 효율적인 옵션. - **비즈니스 크리티컬**: 중요한 작업을 위한 낮은 I/O 대기 시간을 가진 고성능 옵션. #### 고급 보안 기능 * **위협 보호**: 의심스러운 활동 및 SQL 인젝션 공격에 대한 고급 위협 보호 경고. 준수를 위한 데이터베이스 이벤트 추적 및 로깅. * **액세스 제어**: 중앙 집중식 ID 관리를 위한 Microsoft Entra 인증. 세분화된 액세스 제어를 위한 행 수준 보안 및 동적 데이터 마스킹. * **백업**: 시점 복원 기능이 있는 자동 및 수동 백업. ### Azure SQL Virtual Machines **Azure SQL Virtual Machines**는 온프레미스에서 실행되는 서버처럼 **운영 체제 및 SQL Server 인스턴스에 대한 제어**를 원하는 마이그레이션에 가장 적합합니다. 다양한 머신 크기와 SQL Server 버전 및 에디션을 선택할 수 있습니다. #### 주요 기능 **자동 백업**: SQL 데이터베이스에 대한 백업 예약. **자동 패치**: 유지 관리 창 동안 Windows 및 SQL Server 업데이트 설치를 자동화합니다. **Azure Key Vault 통합**: SQL Server VM에 대해 Key Vault를 자동으로 구성합니다. **클라우드 방어자 통합**: 포털에서 SQL에 대한 Defender 추천을 확인합니다. **버전/에디션 유연성**: VM을 재배포하지 않고도 SQL Server 버전 또는 에디션 메타데이터를 변경할 수 있습니다. #### 보안 기능 **Microsoft Defender for SQL**: 보안 통찰력 및 경고. **Azure Key Vault 통합**: 자격 증명 및 암호화 키의 안전한 저장. **Microsoft Entra (Azure AD)**: 인증 및 액세스 제어. ## 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"}} ```bash # 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}} ### SQL 쿼리 연결 및 실행 예제 [Az WebApp 열거하기](az-app-services.md)에서 연결 문자열(자격 증명 포함)을 찾을 수 있습니다: ```bash 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;' ``` 데이터베이스에 접근하기 위해 sqlcmd를 사용할 수도 있습니다. 서버가 공용 연결을 허용하는지 아는 것이 중요합니다 `az sql server show --name --resource-group ` 그리고 방화벽 규칙이 우리의 IP가 접근할 수 있도록 허용하는지도 확인해야 합니다: ```bash sqlcmd -S .database.windows.net -U -P -d ``` ## References - [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) ## Privilege Escalation {{#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}}