# Az - MySQL Databases

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

## Azure MySQL
Azure Database for MySQL è un servizio di database relazionale completamente gestito basato sulla MySQL Community Edition, progettato per fornire scalabilità, sicurezza e flessibilità per varie esigenze applicative. Ha due diversi modelli di distribuzione:

* **Single Server** (è in fase di pensionamento):
- Ottimizzato per distribuzioni MySQL economiche e facili da gestire.
- Le funzionalità includono backup automatici, alta disponibilità e monitoraggio di base.
- Ideale per applicazioni con carichi di lavoro prevedibili.
* **Flexible Server**:
- Fornisce maggiore controllo sulla gestione e configurazione del database.
- Supporta alta disponibilità (nella stessa zona e ridondante per zona).
- Include scalabilità elastica, gestione delle patch e ottimizzazione del carico di lavoro.
- Offre funzionalità di arresto/avvio per risparmiare sui costi.

### Key Features
* **Server Management**: La funzionalità **ad-admin** consente di gestire gli amministratori di Azure Entra ID per i server MySQL, fornendo controllo sull'accesso amministrativo tramite credenziali Entra ID. Mysql supporta le Identità Gestite dall'Utente, utilizzate per autenticarsi senza la necessità di credenziali, e possono essere utilizzate da altri servizi.
* **Lifecycle Management**: opzioni per avviare o arrestare un server, eliminare un'istanza di server flessibile, riavviare un server per applicare rapidamente le modifiche di configurazione e attendere per garantire che un server soddisfi condizioni specifiche prima di procedere con gli script di automazione.
* **Security and Networking**: Proteggi il tuo server limitando le connessioni tramite regole del firewall che consentono solo indirizzi IP pubblici specifici, o utilizzando endpoint privati che integrano il tuo server in una rete virtuale. Tutte le connessioni sono protette con crittografia TLS 1.2. I database, i backup e i log sono crittografati a riposo per impostazione predefinita utilizzando chiavi gestite dal servizio o chiavi personalizzate.
* **Data Protection and Backup**: include opzioni per gestire i backup del server flessibile per il recupero dei dati, eseguire il geo-restore per recuperare un server in una regione diversa, esportare i backup del server per uso esterno (in Anteprima) e ripristinare un server da un backup a un punto specifico nel tempo.

### 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 }}

### Connessione

Con l'estensione rdbms-connect puoi accedere al database con:
```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>;"

```
O con il plugin di estensione nativa MySQL
```bash
mysql -h <server-name>.mysql.database.azure.com -P 3306 -u <username> -p
```
Puoi anche eseguire query con github, ma sono necessari anche la password e l'utente. Devi impostare un file sql con la query da eseguire e poi:
```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>
```
## Elevazione dei privilegi

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

## Post Sfruttamento

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

## Da fare

* Cercare un modo per accedere con mysql flexible-server ad-admin per verificare se è un metodo di elevazione dei privilegi



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