Az - SQL
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die đŹ Discord group of die telegram group of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
Azure SQL
Azure SQL is ân familie van bestuurde, veilige en intelligente produkte wat die SQL Server-databasisengine in die Azure-wolk gebruik. Dit beteken jy hoef nie bekommerd te wees oor die fisiese administrasie van jou bedieners nie, en jy kan fokus op die bestuur van jou data.
Azure SQL bestaan uit vier hoofaanbiedinge:
- Azure SQL Server: ân bediener is nodig vir die ontplooiing en bestuur van SQL Server-databasisse.
- Azure SQL Database: Dit is ân volledig bestuurde databasisdiens, wat jou toelaat om individuele databasisse in die Azure-wolk te huisves.
- Azure SQL Managed Instance: Dit is vir groter skaal, hele SQL Server-instantie-geskepte ontplooiings.
- Azure SQL Server op Azure VMs: Dit is die beste vir argitekture waar jy beheer oor die bedryfstelsel en SQL Server-instantie wil hĂȘ.
SQL Server Sekuriteitskenmerke
Netwerktoegang:
- Publieke eindpunt (kan toegang tot spesifieke netwerke beperk).
- Privaat eindpunte.
- Dit is ook moontlik om verbindings op grond van domeinnames te beperk.
- Dit is ook moontlik om Azure-dienste toe te laat om toegang te verkry (soos om die Query-redigeerder in die portaal te gebruik of om ân Azure VM toe te laat om te verbind).
Verifikasiemetodes:
- Microsoft Entra-slegs verifikasie: Jy moet die Entra-principals aandui wat toegang tot die diens sal hĂȘ.
- Sowel SQL as Microsoft Entra verifikasie: Tradisionele SQL-verifikasie met gebruikersnaam en wagwoord saam met Microsoft Entra.
- Slegs SQL verifikasie: Toegang slegs toelaat via databasisgebruikers.
Let daarop dat as enige SQL-verifikasie toegelaat word, ân admin-gebruiker (gebruikersnaam + wagwoord) aangedui moet word, en as Entra ID-verifikasie gekies word, moet daar ook ten minste een principal met admin-toegang aangedui word.
Enkripsie:
-
Dit word âDeursigtige data-enkripsieâ genoem en dit enkripteer databasisse, rugsteun en logs in rus.
-
Soos altyd, ân Azure bestuurde sleutel word standaard gebruik, maar ân klant bestuurde enkripsiesleutel (CMEK) kan ook gebruik word. Bestuurde Identiteite:
-
Dit is moontlik om stelsel- en gebruiker bestuurde MIâs toe te ken.
-
Gebruik om toegang tot die enkripsiesleutel te verkry (is ân CMEK gebruik) en ander dienste van die databasisse.
-
Vir ân paar voorbeelde van die Azure-dienste wat vanaf die databasis toeganklik is, kyk hierdie bladsy van die dokumentasie
-
As meer as een UMI toegeken word, is dit moontlik om die standaard een aan te dui wat gebruik moet word.
-
Dit is moontlik om ân gefedereerde kliĂ«ntidentiteit vir kruis-tenant toegang te konfigureer.
Sommige opdragte om inligting binne ân blob-stoor vanaf ân SQL-databasis te verkry:
-- Create a credential for the managed identity
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
WITH IDENTITY = 'Managed Identity';
GO
-- Create an external data source pointing to the blob storage to access
CREATE EXTERNAL DATA SOURCE ManagedIdentity
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://testsqlidentity.blob.core.windows.net/sqlcontainer',
CREDENTIAL = ManagedIdentityCredential
);
GO
-- Read a file from ths storage and return it
SELECT *
FROM OPENROWSET(
BULK 'message.txt',
DATA_SOURCE = 'ManagedIdentity',
SINGLE_CLOB
) AS DataFile;
GO
Microsoft Defender:
- Nuttig vir âdie versagting van potensiĂ«le databasis kwesbaarhede, en die opsporing van anomale aktiwiteiteâ
- Ons sal oor Defender in sy eie les praat (dit kan in verskeie ander Azure dienste geaktiveer word)
Backups:
- Die frekwensie van rugsteun word in die retensiebeleide bestuur.
Verwyderde databasisse:
- Dit is moontlik om DBâs wat uit bestaande rugsteun verwyder is, te herstel.
Azure SQL Database
Azure SQL Database is ân volledig bestuurde databasisplatform as ân diens (PaaS) wat skaalbare en veilige relationele databasisoplossings bied. Dit is gebou op die nuutste SQL Server tegnologieĂ« en elimineer die behoefte aan infrastruktuurbestuur, wat dit ân gewilde keuse maak vir wolk-gebaseerde toepassings.
Om ân SQL-databasis te skep, is dit nodig om die SQL-server aan te dui waar dit gehoste sal word.
SQL Database Sekuriteitskenmerke
- Altijd Op Datum: Loop op die nuutste stabiele weergawe van SQL Server en ontvang nuwe kenmerke en patches outomaties.
- Geërfde SQL Server sekuriteitskenmerke:
- Verifikasie (SQL en/of Entra ID)
- Toegewyde Bestuurde Identiteite
- Netwerkbeperkings
- Enkripsie
- Rugsteun
- âŠ
- Data redundansie: Opsies is plaaslik, sone, Geo of Geo-Zone redundante.
- Ledger: Dit verifieer die integriteit van data cryptografies, wat verseker dat enige vervalsing opgespoor word. Nuttig vir finansiële, mediese en enige organisasie wat sensitiewe data bestuur.
ân SQL-databasis kan deel wees van ân elastiese Poel. Elastiese poele is ân kostedoeltreffende oplossing vir die bestuur van verskeie databasisse deur konfigureerbare rekenaar (eDTUs) en stoorhulpbronne onder hulle te deel, met prysbepaling wat slegs gebaseer is op die hulpbronne wat toegeken is eerder as die aantal databasisse.
Azure SQL Kolomvlak Sekuriteit (Maskering) & Ryvlak Sekuriteit
Azure SQL se dinamiese datamaskering is ân kenmerk wat help om sensitiewe inligting te beskerm deur dit van ongemagtigde gebruikers te verberg. In plaas daarvan om die werklike data te verander, maskering dit dinamies die vertoonde data, wat verseker dat sensitiewe besonderhede soos kredietkaartnommers verborge is.
Die Dinamiese Datamaskering raak alle gebruikers behalwe diegene wat nie gemasker is nie (hierdie gebruikers moet aangedui word) en administrateurs. Dit het die konfigurasieopsie wat spesifiseer watter SQL-gebruikers vrygestel is van dinamiese datamaskering, met administrateurs altyd uitgesluit.
Azure SQL Ryvlak Sekuriteit (RLS) is ân kenmerk wat beheer watter rye ân gebruiker kan sien of wysig, wat verseker dat elke gebruiker slegs die data sien wat relevant is vir hulle. Deur sekuriteitsbeleide met filter of blokpredikate te skep, kan organisasies fyngeweefde toegang op databasisvlak afdwing.
Azure SQL Bestuurde Instansie
Azure SQL Bestuurde Instansies is vir groter skaal, hele SQL Server instansie-geskepte ontplooiings. Dit bied byna 100% kompatibiliteit met die nuutste SQL Server op-premises (Enterprise Edition) Databasis-enjin, wat ân inheemse virtuele netwerk (VNet) implementering bied wat algemene sekuriteitskwessies aanspreek, en ân besigheidsmodel wat gunstig is vir op-premises SQL Server kliĂ«nte.
Azure SQL Virtuele Masjiene
Azure SQL Virtuele Masjiene laat jou toe om die bedryfstelsel en die SQL Server instansie te beheer, aangesien ân VM in die VM-diens wat die SQL-server draai, geskep sal word.
Wanneer ân SQL Virtuele Masjien geskep word, is dit moontlik om alle instellings van die VM te kies (soos in die VM-les gewys) wat die SQL-server sal huisves.
- Dit beteken dat die VM toegang tot sommige VNet(s) sal hĂȘ, moontlik Bestuurde Identiteite aan dit geheg kan hĂȘ, en lĂȘerdeelings gemonteer kan hĂȘ⊠wat ân pivoting van die SQL na die VM baie interessant maak.
- Boonop is dit moontlik om ân app-id en geheim te konfigureer om die SQL toegang te gee tot ân spesifieke sleutelkluis, wat sensitiewe inligting kan bevat.
Dit is ook moontlik om dinge soos outomatiese SQL-opdaterings, outomatiese rugsteun, Entra ID-verifikasie en die meeste van die kenmerke van die ander SQL-dienste te konfigureer.
Enumerasie
# List Servers
az sql server list # managed identities are enumerated here too
## 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>
# List schema by the database
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas?api-version=2021-11-01"
# Get tables of a database with the schema
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas/<schemaName>/tables?api-version=2021-11-01"
# Get columns of a database
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/columns?api-version=2021-11-01"
# Get columns of a table
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas/<schemaName>/tables/<tableName>/columns?api-version=2021-11-01"
# Get DataMaskingPolicies of a database
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/dataMaskingPolicies/Default?api-version=2021-11-01"
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/dataMaskingPolicies/Default/rules?api-version=2021-11-01"
Boonop, as jy die Dinamiese Gegevensmaskering en Ryvlakbeleide binne die databasis wil opnoem, kan jy die volgende navraag doen:
--Enumerates the masked columns
SELECT
OBJECT_NAME(mc.object_id) AS TableName,
c.name AS ColumnName,
mc.masking_function AS MaskingFunction
FROM sys.masked_columns AS mc
JOIN sys.columns AS c
ON mc.object_id = c.object_id
AND mc.column_id = c.column_id
--Enumerates Row level policies
SELECT
sp.name AS PolicyName,
sp.is_enabled,
sp.create_date,
sp.modify_date,
OBJECT_NAME(sp.object_id) AS TableName,
sp2.predicate_definition AS PredicateDefinition
FROM sys.security_policies AS sp
JOIN sys.security_predicates AS sp2
ON sp.object_id = sp2.object_id;
Verbind en voer SQL-navrae uit
Jy kan ân verbindsstring (wat geloofsbriewe bevat) vind van voorbeeld enumerating an 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;'
U kan ook sqlcmd gebruik om toegang tot die databasis te verkry. Dit is belangrik om te weet of die bediener openbare verbindings toelaat az sql server show --name <server-name> --resource-group <resource-group>, en ook of die vuurmuurreël ons IP toelaat om toegang te verkry:
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
Verwysings
- 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
Privilege Escalation
Post Exploitation
Persistensie
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die đŹ Discord group of die telegram group of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

