# Az - SQL Database Privesc

{{#include ../../../banners/hacktricks-training.md}}

## SQL Database Privesc

Pour plus d'informations sur SQL Database, consultez :

{{#ref}}
../az-services/az-sql.md
{{#endref}}

### `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_password>
```
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
```
### `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>
```
{{#include ../../../banners/hacktricks-training.md}}
