Az - SQL
Reading time: 13 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
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 vier Hauptangeboten:
- Azure SQL Server: Ein Server wird für die Bereitstellung und Verwaltung von SQL Server-Datenbanken benötigt.
- Azure SQL-Datenbank: Dies ist ein vollständig verwalteter Datenbankdienst, der es Ihnen ermöglicht, einzelne Datenbanken in der Azure-Cloud zu hosten.
- Azure SQL Managed Instance: Dies ist für größere, gesamte SQL Server-Instanz-Umsetzungen.
- Azure SQL Server auf Azure-VMs: Dies ist am besten für Architekturen geeignet, bei denen Sie Kontrolle über das Betriebssystem und die SQL Server-Instanz wünschen.
SQL Server-Sicherheitsfunktionen
Netzwerkzugang:
- Öffentlicher Endpunkt (kann den Zugriff auf bestimmte Netzwerke beschränken).
- Private Endpunkte.
- Es ist auch möglich, Verbindungen basierend auf Domainnamen einzuschränken.
- Es ist auch möglich, Azure-Dienste den Zugriff zu erlauben (zum Beispiel um den Abfrage-Editor im Portal zu verwenden oder um einer Azure-VM die Verbindung zu erlauben).
Authentifizierungsmethoden:
- Microsoft Entra-only-Authentifizierung: Sie müssen die Entra-Prinzipien angeben, die Zugriff auf den Dienst haben werden.
- Sowohl SQL- als auch Microsoft Entra-Authentifizierung: Traditionelle SQL-Authentifizierung mit Benutzername und Passwort zusammen mit Microsoft Entra.
- Nur SQL-Authentifizierung: Nur Zugriff über Datenbankbenutzer erlauben.
Beachten Sie, dass, wenn eine SQL-Authentifizierung erlaubt ist, ein Administrationsbenutzer (Benutzername + Passwort) angegeben werden muss, und wenn die Entra-ID-Authentifizierung ausgewählt ist, muss auch mindestens ein Prinzip mit Administrationszugriff angegeben werden.
Verschlüsselung:
-
Es wird als „Transparente Datenverschlüsselung“ bezeichnet und verschlüsselt Datenbanken, Backups und Protokolle im Ruhezustand.
-
Wie immer wird standardmäßig ein von Azure verwalteter Schlüssel verwendet, aber es könnte auch ein vom Kunden verwalteter Verschlüsselungsschlüssel (CMEK) verwendet werden. Verwaltete Identitäten:
-
Es ist möglich, system- und benutzerverwaltete MIs zuzuweisen.
-
Wird verwendet, um auf den Verschlüsselungsschlüssel zuzugreifen (wenn ein CMEK verwendet wird) und auf andere Dienste von den Datenbanken.
-
Für einige Beispiele der Azure-Dienste, die von der Datenbank aus zugegriffen werden können, siehe diese Seite der Dokumentation
-
Wenn mehr als eine UMI zugewiesen ist, ist es möglich, die Standard-UMI anzugeben, die verwendet werden soll.
-
Es ist möglich, eine föderierte Client-Identität für den Zugriff über Mandanten hinweg zu konfigurieren.
Einige Befehle, um Informationen innerhalb eines Blob-Speichers von einer SQL-Datenbank aus zuzugreifen:
-- 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:
- Nützlich zur „Minderung potenzieller Datenbankanfälligkeiten und zur Erkennung anomaler Aktivitäten“
- Wir werden in einer eigenen Lektion über Defender sprechen (er kann in mehreren anderen Azure-Diensten aktiviert werden)
Backups:
- Die Backup-Frequenz wird in den Aufbewahrungsrichtlinien verwaltet.
Gelöschte Datenbanken:
- Es ist möglich, DBs, die aus bestehenden Backups gelöscht wurden, wiederherzustellen.
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.
Um eine SQL-Datenbank zu erstellen, muss der SQL-Server angegeben werden, auf dem sie gehostet wird.
Sicherheitsmerkmale der SQL-Datenbank
- Immer auf dem neuesten Stand: Läuft auf der neuesten stabilen Version von SQL Server und erhält automatisch neue Funktionen und Patches.
- Vererbte Sicherheitsmerkmale von SQL Server:
- Authentifizierung (SQL und/oder Entra ID)
- Zugewiesene verwaltete Identitäten
- Netzwerkbeschränkungen
- Verschlüsselung
- Backups
- …
- Datenredundanz: Optionen sind lokal, zonen-, geo- oder geo-zonenredundant.
- Ledger: Es verifiziert kryptografisch die Integrität der Daten und stellt sicher, dass jede Manipulation erkannt wird. Nützlich für Finanz-, Medizin- und jede Organisation, die mit sensiblen Daten umgeht.
Eine SQL-Datenbank könnte Teil eines elastischen Pools sein. Elastische Pools sind eine kosteneffiziente Lösung zur Verwaltung mehrerer Datenbanken, indem konfigurierbare Rechen- (eDTUs) und Speicherressourcen unter ihnen geteilt werden, wobei die Preisgestaltung ausschließlich auf den zugewiesenen Ressourcen und nicht auf der Anzahl der Datenbanken basiert.
Azure SQL-Spaltenebene-Sicherheit (Maskierung) & Zeilenebene-Sicherheit
Die dynamische Datenmaskierung von Azure SQL ist eine Funktion, die sensible Informationen schützt, indem sie sie vor unbefugten Benutzern verbirgt. Anstatt die tatsächlichen Daten zu ändern, maskiert sie dynamisch die angezeigten Daten, sodass sensible Details wie Kreditkartennummern verborgen bleiben.
Die dynamische Datenmaskierung betrifft alle Benutzer, außer denjenigen, die nicht maskiert sind (diese Benutzer müssen angegeben werden) und Administratoren. Es gibt die Konfigurationsoption, die angibt, welche SQL-Benutzer von der dynamischen Datenmaskierung ausgenommen sind, wobei Administratoren immer ausgeschlossen sind.
Die Zeilenebene-Sicherheit (RLS) von Azure SQL ist eine Funktion, die steuert, welche Zeilen ein Benutzer anzeigen oder ändern kann, sodass jeder Benutzer nur die für ihn relevanten Daten sieht. Durch die Erstellung von Sicherheitsrichtlinien mit Filter- oder Blockprädikaten können Organisationen einen feingranularen Zugriff auf Datenbankebene durchsetzen.
Azure SQL Managed Instance
Azure SQL Managed Instances sind für größere, gesamte SQL Server-Instanz-Scoped-Bereitstellungen. Sie bietet nahezu 100% Kompatibilität mit dem neuesten SQL Server vor Ort (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 lokale SQL Server-Kunden vorteilhaft ist.
Azure SQL-VMs
Azure SQL-VMs ermöglichen es, das Betriebssystem und die SQL Server-Instanz zu steuern, da eine VM im VM-Dienst, der den SQL-Server ausführt, erstellt wird.
Wenn eine SQL-VM erstellt wird, ist es möglich, alle Einstellungen der VM auszuwählen (wie in der VM-Lektion gezeigt), die den SQL-Server hosten wird.
- Das bedeutet, dass die VM auf einige VNet(s) zugreifen wird, möglicherweise verwaltete Identitäten angehängt hat, Datei-Share gemountet haben könnte… was ein Pivoting vom SQL zur VM super interessant macht.
- Darüber hinaus ist es möglich, eine App-ID und ein Geheimnis zu konfigurieren, um dem SQL den Zugriff auf einen bestimmten Schlüsselbund zu ermöglichen, der sensible Informationen enthalten könnte.
Es ist auch möglich, Dinge wie automatische SQL-Updates, automatische Backups, Entra ID-Authentifizierung und die meisten Funktionen der anderen SQL-Dienste zu konfigurieren.
Enumeration
# 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"
Zusätzlich, wenn Sie die Dynamic Data Masking und Row Level-Richtlinien innerhalb der Datenbank auflisten möchten, können Sie abfragen:
--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;
Verbinden und SQL-Abfragen ausführen
Sie könnten eine Verbindungszeichenfolge (die Anmeldeinformationen enthält) aus dem Beispiel Auflisten einer Az WebApp finden:
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 <server-name> --resource-group <resource-group>
, und auch, ob die Firewallregel unsere IP den Zugriff erlaubt:
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
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/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
Privilegieneskalation
Post-Exploitation
Persistenz
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.