19 KiB
Az - SQL
{{#include ../../../banners/hacktricks-training.md}}
Azure SQL
Azure SQL - це сімейство керованих, безпечних та інтелектуальних продуктів, які використовують SQL Server database engine в хмарі Azure. Це означає, що вам не потрібно турбуватися про фізичне адміністрування ваших серверів, і ви можете зосередитися на управлінні вашими даними.
Azure SQL складається з трьох основних пропозицій:
- Azure SQL Database: Це повністю керована служба бази даних, яка дозволяє вам розміщувати окремі бази даних у хмарі Azure. Вона пропонує вбудовану інтелектуальність, яка вивчає ваші унікальні шаблони бази даних і надає індивідуальні рекомендації та автоматичну оптимізацію.
- Azure SQL Managed Instance: Це для масштабних, повних розгортань SQL Server. Вона забезпечує майже 100% сумісність з останнім SQL Server на місцях (Enterprise Edition) Database Engine, що забезпечує рідну реалізацію віртуальної мережі (VNet), яка вирішує загальні проблеми безпеки, і бізнес-модель, вигідну для клієнтів SQL Server на місцях.
- Azure SQL Server на Azure VMs: Це Інфраструктура як Служба (IaaS) і найкраще підходить для міграцій, де ви хочете контролювати операційну систему та екземпляр SQL Server, як це було на сервері на місцях.
Azure SQL Database
Azure SQL Database - це повністю керована платформа бази даних як служба (PaaS), яка забезпечує масштабовані та безпечні рішення реляційних баз даних. Вона побудована на останніх технологіях SQL Server і усуває необхідність в управлінні інфраструктурою, що робить її популярним вибором для хмарних додатків.
Основні функції
- Завжди актуально: Працює на останній стабільній версії SQL Server і автоматично отримує нові функції та патчі.
- Можливості PaaS: Вбудована висока доступність, резервне копіювання та оновлення.
- Гнучкість даних: Підтримує реляційні та нереляційні дані (наприклад, графіки, JSON, просторові дані та XML).
Моделі покупки / Рівні послуг
- vCore-based: Вибір обчислювальних потужностей, пам'яті та зберігання незалежно. Для загального призначення, бізнес-критичних (з високою стійкістю та продуктивністю для OLTP додатків) і масштабується до 128 ТБ зберігання.
- DTU-based: Об'єднує обчислювальні потужності, пам'ять та I/O в фіксовані рівні. Збалансовані ресурси для загальних завдань.
- Стандартний: Збалансовані ресурси для загальних завдань.
- Преміум: Висока продуктивність для вимогливих навантажень.
Моделі розгортання
Azure SQL Database підтримує гнучкі варіанти розгортання для різних потреб:
- Окрема база даних:
- Повністю ізольована база даних з власними виділеними ресурсами.
- Чудово підходить для мікросервісів або додатків, які потребують єдиного джерела даних.
- Еластичний пул:
- Дозволяє кільком базам даних ділити ресурси в межах пулу.
- Економічно вигідно для додатків з коливаннями в режимі використання через кілька баз даних.
Масштабована продуктивність і пули
- Окремі бази даних: Кожна база даних ізольована і має власні виділені ресурси обчислень, пам'яті та зберігання. Ресурси можуть бути масштабовані динамічно (вгору або вниз) без простою (1–128 vCores, 32 ГБ–4 ТБ зберігання та до 128 ТБ).
- Еластичні пули: Ділять ресурси між кількома базами даних у пулі для максимізації ефективності та економії витрат. Ресурси також можуть бути масштабовані динамічно для всього пулу.
- Гнучкість рівня послуг: Почніть з невеликої бази даних у рівні загального призначення. Оновіть до бізнес-критичного або гіпермасштабного рівнів, коли потреби зростають.
- Варіанти масштабування: Динамічне масштабування або альтернативи автоматичного масштабування.
Вбудоване моніторинг та оптимізація
- Query Store: Відстежує проблеми з продуктивністю, визначає основних споживачів ресурсів і пропонує практичні рекомендації.
- Автоматична оптимізація: Проактивно оптимізує продуктивність за допомогою функцій, таких як автоматичне індексування та корекція планів запитів.
- Інтеграція телеметрії: Підтримує моніторинг через Azure Monitor, Event Hubs або Azure Storage для індивідуальних інсайтів.
Відновлення після катастроф та доступність
- Автоматичні резервні копії: SQL Database автоматично виконує повні, диференційні та резервні копії журналу транзакцій бази даних.
- Відновлення до певного моменту: Відновлює бази даних до будь-якого минулого стану в межах періоду зберігання резервних копій.
- Гео-резервування
- Групи відмови: Спрощує відновлення після катастроф, об'єднуючи бази даних для автоматичного переключення між регіонами.
Azure SQL Managed Instance
Azure SQL Managed Instance - це платформа як служба (PaaS) бази даних, яка пропонує майже 100% сумісність з SQL Server і автоматично виконує більшість управлінських завдань (наприклад, оновлення, патчинг, резервне копіювання, моніторинг). Вона забезпечує хмарне рішення для міграції баз даних SQL Server на місцях з мінімальними змінами.
Рівні послуг
- Загальне призначення: Економічний варіант для додатків зі стандартними вимогами до I/O та затримки.
- Бізнес-критичний: Високопродуктивний варіант з низькою затримкою I/O для критичних навантажень.
Розширені функції безпеки
- Захист від загроз: Розширений захист від загроз сповіщає про підозрілі дії та атаки SQL-ін'єкцій. Аудит для відстеження та реєстрації подій бази даних для відповідності.
- Контроль доступу: Аутентифікація Microsoft Entra для централізованого управління ідентичністю. Безпека на рівні рядків та динамічне маскування даних для детального контролю доступу.
- Резервні копії: Автоматизовані та ручні резервні копії з можливістю відновлення до певного моменту.
Azure SQL Virtual Machines
Azure SQL Virtual Machines найкраще підходять для міграцій, де ви хочете контролювати операційну систему та екземпляр SQL Server, як це було на сервері на місцях. Вони можуть мати різні розміри машин і широкий вибір версій та редакцій SQL Server.
Основні функції
Автоматизоване резервне копіювання: Заплануйте резервні копії для SQL баз даних.
Автоматичне патчування: Автоматизує установку оновлень Windows та SQL Server під час вікна обслуговування.
Інтеграція Azure Key Vault: Автоматично налаштовує Key Vault для SQL Server VMs.
Інтеграція Defender for Cloud: Переглядайте рекомендації Defender for SQL у порталі.
Гнучкість версії/редакції: Змінюйте метадані версії або редакції SQL Server без повторного розгортання VM.
Функції безпеки
Microsoft Defender for SQL: Інсайти та сповіщення про безпеку.
Інтеграція Azure Key Vault: Безпечне зберігання облікових даних та ключів шифрування.
Microsoft Entra (Azure AD): Аутентифікація та контроль доступу.
Enumeration
{{#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}}
Підключення та виконання SQL запитів
Ви можете знайти рядок підключення (що містить облікові дані) з прикладу перерахування 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;'
Ви також можете використовувати sqlcmd для доступу до бази даних. Важливо знати, чи дозволяє сервер публічні з'єднання az sql server show --name <server-name> --resource-group <resource-group>, а також чи дозволяє правило брандмауера нашій IP-адресі доступ:
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
Посилання
- 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/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
Підвищення привілеїв
{{#ref}} ../az-privilege-escalation/az-sql-privesc.md {{#endref}}
Після експлуатації
{{#ref}} ../az-post-exploitation/az-sql-post-exploitation.md {{#endref}}
{{#include ../../../banners/hacktricks-training.md}}