# GCP - Cloud SQL Enum

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

## Informazioni di Base

Google Cloud SQL è un servizio gestito che **semplifica la configurazione, la manutenzione e l'amministrazione di database relazionali** come MySQL, PostgreSQL e SQL Server su Google Cloud Platform, rimuovendo la necessità di gestire compiti come la fornitura dell'hardware, la configurazione del database, le patch e i backup.

Le caratteristiche principali di Google Cloud SQL includono:

1. **Completamente Gestito**: Google Cloud SQL è un servizio completamente gestito, il che significa che Google si occupa delle attività di manutenzione del database come patching, aggiornamenti, backup e configurazione.
2. **Scalabilità**: Fornisce la possibilità di scalare la capacità di archiviazione e le risorse di calcolo del tuo database, spesso senza tempi di inattività.
3. **Alta Disponibilità**: Offre configurazioni ad alta disponibilità, garantendo che i servizi del tuo database siano affidabili e possano resistere a guasti di zona o di istanza.
4. **Sicurezza**: Fornisce robuste funzionalità di sicurezza come la crittografia dei dati, controlli di Identity and Access Management (IAM) e isolamento della rete utilizzando IP privati e VPC.
5. **Backup e Ripristino**: Supporta backup automatici e ripristino a un punto nel tempo, aiutandoti a proteggere e ripristinare i tuoi dati.
6. **Integrazione**: Si integra perfettamente con altri servizi Google Cloud, fornendo una soluzione completa per costruire, distribuire e gestire applicazioni.
7. **Prestazioni**: Offre metriche di prestazione e diagnostica per monitorare, risolvere problemi e migliorare le prestazioni del database.

### Password

Nella console web, Cloud SQL consente all'utente di **impostare** la **password** del database, c'è anche una funzione di generazione, ma soprattutto, **MySQL** consente di **lasciare una password vuota e tutti consentono di impostare come password solo il carattere "a":**

<figure><img src="../../../images/image (14).png" alt=""><figcaption></figcaption></figure>

È anche possibile configurare una politica delle password che richiede **lunghezza**, **complessità**, **disabilitazione del riutilizzo** e **disabilitazione del nome utente nella password**. Tutti sono disabilitati per impostazione predefinita.

**SQL Server** può essere configurato con **Autenticazione di Active Directory**.

### Disponibilità della Zona

Il database può essere **disponibile in 1 zona o in più**, ovviamente, è consigliato avere database importanti in più zone.

### Crittografia

Per impostazione predefinita viene utilizzata una chiave di crittografia gestita da Google, ma è anche **possibile selezionare una chiave di crittografia gestita dal cliente (CMEK)**.

### Connessioni

- **IP Privato**: Indica la rete VPC e il database otterrà un IP privato all'interno della rete
- **IP Pubblico**: Il database otterrà un IP pubblico, ma per impostazione predefinita nessuno potrà connettersi
- **Reti Autorizzate**: Indica gli **intervalli di IP pubblici che dovrebbero essere autorizzati** a connettersi al database
- **Percorso Privato**: Se il DB è connesso a qualche VPC, è possibile abilitare questa opzione e dare **ad altri servizi GCP come BigQuery accesso su di esso**

<figure><img src="../../../images/image (15).png" alt=""><figcaption></figcaption></figure>

### Protezione dei Dati

- **Backup giornalieri**: Esegui backup automatici giornalieri e indica il numero di backup che desideri mantenere.
- **Ripristino a un punto nel tempo**: Ti consente di recuperare dati da un punto specifico nel tempo, fino a una frazione di secondo.
- **Protezione dalla Cancellazione**: Se abilitata, il DB non potrà essere cancellato fino a quando questa funzione non sarà disabilitata.

### Enumerazione
```bash
# Get SQL instances
gcloud sql instances list
gcloud sql instances describe <inst-name> # get IPs, CACert, settings

# Get database names inside an instance (like information_schema, sys...)
gcloud sql databases list --instance <intance-name>
gcloud sql databases describe <db-name> --instance <intance-name>

# Get usernames inside the db instance
gcloud sql users list --instance <intance-name>

# Backups
gcloud sql backups list --instance <intance-name>
gcloud sql backups describe <backup-name> --instance <intance-name>
```
### Enum non autenticato

{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-cloud-sql-unauthenticated-enum.md
{{#endref}}

### Post Sfruttamento

{{#ref}}
../gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
{{#endref}}

### Persistenza

{{#ref}}
../gcp-persistence/gcp-cloud-sql-persistence.md
{{#endref}}

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