# Az - MySQL Databases

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

## Azure MySQL
Azure Database for MySQL is 'n volledig bestuurde relationele databasisdiens gebaseer op die MySQL Gemeenskapsuitgawe, ontwerp om skaalbaarheid, sekuriteit en buigsaamheid te bied vir verskeie toepassingsbehoeftes. Dit het twee verskillende ontplooiingsmodelle:

* **Single Server** (is op die aftreepad):
- Geoptimaliseer vir kostedoeltreffende en maklik bestuurbare MySQL ontplooiings.
- Kenmerke sluit outomatiese rugsteun, hoë beskikbaarheid en basiese monitering in.
- Ideaal vir toepassings met voorspelbare werklas.
* **Flexible Server**:
- Bied meer beheer oor databasisbestuur en konfigurasie.
- Ondersteun hoë beskikbaarheid (dieselfde sone en sone-redundant).
- Kenmerke sluit elastiese skaalbaarheid, patchbestuur en werklasoptimalisering in.
- Bied stop/start funksionaliteit vir kostebesparings.

### Key Features
* **Server Management**: Die **ad-admin** kenmerk laat die bestuur van Azure Entra ID administrateurs vir MySQL bedieners toe, wat beheer oor administratiewe toegang via Entra ID akrediteerbare bied. Mysql ondersteun Gebruiker Beheerde Identiteite, wat gebruik word om te autentiseer sonder die behoefte aan akrediteerbare, en kan deur ander dienste gebruik word.
* **Lifecycle Management**: opsies om 'n bediener te begin of te stop, 'n fleksibele bedienerinstansie te verwyder, 'n bediener te herbegin om vinnig konfigurasiewijzigings toe te pas, en te wag om te verseker dat 'n bediener aan spesifieke voorwaardes voldoen voordat outomatiseringskripte voortgaan.
* **Security and Networking**: Beveilig jou bediener deur verbindings te beperk deur firewall-reëls wat slegs spesifieke publieke IP adresse toelaat, of deur private eindpunte te gebruik wat jou bediener in 'n virtuele netwerk integreer. Alle verbindings is beskerm met TLS 1.2 versleuteling. Databasisse, rugsteun en logs is standaard versleuteld in rus met behulp van diensbestuurde sleutels of pasgemaakte sleutels.
* **Data Protection and Backup**: sluit opsies in om fleksibele bediener rugsteun te bestuur vir dataherstel, geo-herstel uit te voer om 'n bediener in 'n ander streek te herstel, bediener rugsteun vir eksterne gebruik (in Voorbeeld) te voer, en 'n bediener van rugsteun na 'n spesifieke tydstip te herstel.

### Enumeration

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List all flexible-servers
az mysql flexible-server db list --resource-group <resource-group-name>
# List databases in a flexible-server
az mysql flexible-server db list --resource-group <resource-group-name> --server-name <server_name>
# Show specific details of a MySQL database
az mysql flexible-server db show --resource-group <resource-group-name> --server-name <server_name> --database-name <database_name>

# List firewall rules of the a server
az mysql flexible-server firewall-rule list --resource-group <resource-group-name> --name <server_name>

# List all ad-admin in a server
az mysql flexible-server ad-admin list --resource-group <resource-group-name> --server-name <server_name>
# List all user assigned managed identities from the server
az mysql flexible-server identity list --resource-group <resource-group-name> --server-name <server_name>

# List the server backups
az mysql flexible-server backup list --resource-group <resource-group-name> --name <server_name>
# List all read replicas for a given server
az mysql flexible-server replica list --resource-group <resource-group-name> --name <server_name>

# Get the server's advanced threat protection setting
az mysql flexible-server advanced-threat-protection-setting show --resource-group <resource-group-name> --name <server_name>
# List all of the maintenances of a flexible server
az mysql flexible-server maintenance list --resource-group <resource-group-name> --server-name <server_name>
# List log files for a server.
az mysql flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>

```
{{#endtab }}

{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.MySql

# Get all flexible servers in a resource group
Get-AzMySqlFlexibleServer -ResourceGroupName <resource-group-name>

# List databases in a specific flexible server
Get-AzMySqlFlexibleServerDatabase -ResourceGroupName <resource-group-name> -ServerName <server_name>

# Get details of a specific database in a flexible server
Get-AzMySqlFlexibleServerDatabase -ResourceGroupName <resource-group-name> -ServerName <server_name> -DatabaseName <database_name>

# List all firewall rules for a flexible server
Get-AzMySqlFlexibleServerFirewallRule -ResourceGroupName <resource-group-name> -ServerName <server_name>

# Get the identity information of a flexible server
Get-AzMySqlFlexibleServerIdentity -ResourceGroupName <resource-group-name> -ServerName <server_name>

# Get the server's advanced threat protection setting
Get-AzMySqlFlexibleServerAdvancedThreatProtection -ResourceGroupName <resource-group-name> -ServerName <server_name>

# List configuration settings of a flexible server
Get-AzMySqlFlexibleServerConfiguration -ResourceGroupName <resource-group-name> -ServerName <server_name>
# Get the connection string for a flexible server
Get-AzMySqlFlexibleServerConnectionString -ResourceGroupName <resource-group-name> -ServerName <server_name> -Client <client>

# List all read replicas for a given server
Get-AzMySqlFlexibleServerReplica -ResourceGroupName <resource-group-name> -ServerName <server_name>

# Get the maintenance window details for a flexible server
Get-AzMySqlFlexibleServerMaintenanceWindow -ResourceGroupName <resource-group-name> -ServerName <server_name>

# List log files for a server
Get-AzMySqlFlexibleServerLog -ResourceGroupName <resource-group-name> -ServerName <server_name>
```
{{#endtab }}
{{#endtabs }}

### Verbinding

Met die uitbreiding rdbms-connect kan jy toegang tot die databasis verkry met:
```bash
az mysql flexible-server connect -n <server-name> -u <username> -p <password> --interactive

#or execute commands
az mysql flexible-server execute \
-n <server-name> \
-u <username> \
-p "<password>" \
-d <database-name> \
--querytext "SELECT * FROM <table-name>;"

```
Of met die MySQL inheemse uitbreiding plugin
```bash
mysql -h <server-name>.mysql.database.azure.com -P 3306 -u <username> -p
```
Ook kan jy navrae uitvoer met github, maar die wagwoord en gebruiker is ook nodig. Jy moet 'n sql-lêer opstel met die navraag om uit te voer en dan:
```bash
# Setup
az mysql flexible-server deploy setup \
-s <server-name> \
-g <resource-group> \
-u <admin-user> \
-p "<admin-password>" \
--sql-file <path-to-sql-file> \
--repo <github-username/repository-name> \
--branch <branch-name> \
--action-name <action-name> \
--allow-push

# Run it
az mysql flexible-server deploy run \
--action-name <action-name> \
--branch <branch-name>
```
## Privilege Escalation

{{#ref}}
../az-privilege-escalation/az-mysql-privesc.md
{{#endref}}

## Post Exploitation

{{#ref}}
../az-post-exploitation/az-mysql-post-exploitation.md
{{#endref}}

## ToDo

* Kyk 'n manier om toegang te verkry met mysql flexible-server ad-admin om te verifieer dat dit 'n privesc metode is



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