# GCP - Cloud SQL Enum

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

## Informations de base

Google Cloud SQL est un service géré qui **simplifie la configuration, la maintenance et l'administration des bases de données relationnelles** comme MySQL, PostgreSQL et SQL Server sur Google Cloud Platform, éliminant ainsi le besoin de gérer des tâches comme la provision de matériel, la configuration de la base de données, les mises à jour et les sauvegardes.

Les principales caractéristiques de Google Cloud SQL incluent :

1. **Entièrement géré** : Google Cloud SQL est un service entièrement géré, ce qui signifie que Google s'occupe des tâches de maintenance de la base de données comme les mises à jour, les sauvegardes et la configuration.
2. **Scalabilité** : Il offre la possibilité d'augmenter la capacité de stockage et les ressources de calcul de votre base de données, souvent sans temps d'arrêt.
3. **Haute disponibilité** : Propose des configurations de haute disponibilité, garantissant que vos services de base de données sont fiables et peuvent résister à des pannes de zone ou d'instance.
4. **Sécurité** : Fournit des fonctionnalités de sécurité robustes comme le chiffrement des données, les contrôles d'Identity and Access Management (IAM) et l'isolement réseau utilisant des IP privées et VPC.
5. **Sauvegardes et récupération** : Prend en charge les sauvegardes automatiques et la récupération à un instant donné, vous aidant à protéger et restaurer vos données.
6. **Intégration** : S'intègre parfaitement avec d'autres services Google Cloud, offrant une solution complète pour construire, déployer et gérer des applications.
7. **Performance** : Offre des métriques de performance et des diagnostics pour surveiller, dépanner et améliorer la performance de la base de données.

### Mot de passe

Dans la console web, Cloud SQL permet à l'utilisateur de **définir** le **mot de passe** de la base de données, il y a également une fonction de génération, mais surtout, **MySQL** permet de **laisser un mot de passe vide et tous permettent de définir comme mot de passe juste le caractère "a" :**

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

Il est également possible de configurer une politique de mot de passe exigeant **longueur**, **complexité**, **désactivation de la réutilisation** et **désactivation du nom d'utilisateur dans le mot de passe**. Tous sont désactivés par défaut.

**SQL Server** peut être configuré avec **l'authentification Active Directory**.

### Disponibilité de la zone

La base de données peut être **disponible dans 1 zone ou dans plusieurs**, bien sûr, il est recommandé d'avoir des bases de données importantes dans plusieurs zones.

### Chiffrement

Par défaut, une clé de chiffrement gérée par Google est utilisée, mais il est également **possible de sélectionner une clé de chiffrement gérée par le client (CMEK)**.

### Connexions

- **IP privée** : Indiquez le réseau VPC et la base de données obtiendra une IP privée à l'intérieur du réseau
- **IP publique** : La base de données obtiendra une IP publique, mais par défaut, personne ne pourra se connecter
- **Réseaux autorisés** : Indiquez les **plages d'IP publiques qui devraient être autorisées** à se connecter à la base de données
- **Chemin privé** : Si la DB est connectée à un VPC, il est possible d'activer cette option et de donner **accès à d'autres services GCP comme BigQuery**

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

### Protection des données

- **Sauvegardes quotidiennes** : Effectuez des sauvegardes automatiques quotidiennes et indiquez le nombre de sauvegardes que vous souhaitez maintenir.
- **Récupération à un instant donné** : Vous permet de récupérer des données à partir d'un moment spécifique, jusqu'à une fraction de seconde.
- **Protection contre la suppression** : Si activée, la DB ne pourra pas être supprimée tant que cette fonctionnalité n'est pas désactivée.

### Énumération
```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 authentifié

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

### Post exploitation

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

### Persistance

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

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