# Az - MySQL Baze Podataka

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

## Azure MySQL
Azure Database for MySQL je potpuno upravljana relacijska baza podataka zasnovana na MySQL Community Edition, dizajnirana da pruži skalabilnost, sigurnost i fleksibilnost za različite potrebe aplikacija. Ima dva različita modela implementacije:

* **Single Server** (je na putu povlačenja):
- Optimizovan za isplative i lako upravljive MySQL implementacije.
- Karakteristike uključuju automatske rezervne kopije, visoku dostupnost i osnovno praćenje.
- Idealno za aplikacije sa predvidivim opterećenjima.
* **Flexible Server**:
- Pruža veću kontrolu nad upravljanjem i konfiguracijom baze podataka.
- Podržava visoku dostupnost (isti region i redundantni region).
- Karakteristike uključuju elastično skaliranje, upravljanje zakrpama i optimizaciju opterećenja.
- Nudi funkcionalnost za zaustavljanje/pokretanje radi uštede troškova.

### Ključne Karakteristike
* **Upravljanje Serverom**: **ad-admin** funkcija omogućava upravljanje Azure Entra ID administratorima za MySQL servere, pružajući kontrolu nad administrativnim pristupom putem Entra ID akreditiva. Mysql podržava User Managed Identities, koje se koriste za autentifikaciju bez potrebe za akreditivima, i mogu se koristiti od strane drugih usluga.
* **Upravljanje Životnim Ciklusom**: opcije za pokretanje ili zaustavljanje servera, brisanje instance fleksibilnog servera, ponovo pokretanje servera kako bi se brzo primenile promene u konfiguraciji, i čekanje da se osigura da server ispunjava određene uslove pre nego što se nastavi sa automatizovanim skriptama.
* **Sigurnost i Mrežno Povezivanje**: Osigurajte svoj server ograničavanjem veza putem pravila vatrozida koja dozvoljavaju samo određene javne IP adrese, ili korišćenjem privatnih krajnjih tačaka koje integrišu vaš server u virtuelnu mrežu. Sve veze su zaštićene TLS 1.2 enkripcijom. Baze podataka, rezervne kopije i logovi su podrazumevano enkriptovani u mirovanju koristeći ključeve koje upravlja usluga ili prilagođene ključeve.
* **Zaštita Podataka i Rezervne Kopije**: uključuje opcije za upravljanje rezervnim kopijama fleksibilnog servera za oporavak podataka, izvođenje geo-obnavljanja za oporavak servera u drugoj regiji, izvoz rezervnih kopija servera za spoljašnju upotrebu (u Previu), i obnavljanje servera iz rezervne kopije na određenu tačku u vremenu.

### Enumeracija

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

### Povezivanje

Sa ekstenzijom rdbms-connect možete pristupiti bazi podataka sa:
```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>;"

```
Ili sa MySQL nativnim ekstenzijskim pluginom
```bash
mysql -h <server-name>.mysql.database.azure.com -P 3306 -u <username> -p
```
Takođe možete izvršavati upite sa github-om, ali su potrebni i korisničko ime i lozinka. Morate postaviti sql datoteku sa upitom koji treba izvršiti, a zatim:
```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>
```
## Eskalacija privilegija

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

## Post eksploatacija

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

## ToDo

* Potražite način da pristupite mysql flexible-server ad-admin da biste proverili da li je to metoda eskalacije privilegija



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