# Az - PostgreSQL Databases

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

## Azure PostgreSQL
**Azure Database for PostgreSQL** は、**PostgreSQL** Community Edition に基づいた完全管理型の **リレーショナルデータベースサービス** です。さまざまなアプリケーションニーズに対してスケーラビリティ、セキュリティ、柔軟性を提供するように設計されています。Azure MySQL と同様に、PostgreSQL には 2 つのデプロイメントモデルがあります。

* **Single Server** (引退パス上):
- シンプルでコスト効果の高い PostgreSQL デプロイメントに最適化されています。
- 自動バックアップ、基本的な監視、高可用性を特徴としています。
- 予測可能なワークロードを持つアプリケーションに最適です。
* **Flexible Server**:
- データベース管理と構成に対するより大きな制御を提供します。
- 同じゾーン内およびゾーン間での高可用性をサポートします。
- 弾力的なスケーリング、自動メンテナンス、コスト削減機能を特徴としています。
- コストを最適化するためにサーバーの開始と停止が可能です。

### Key Features

* **Custom Maintenance Windows**: 中断を最小限に抑えるために更新をスケジュールします。
* **Active Monitoring**: データベースのパフォーマンスを追跡し改善するための詳細なメトリクスとログにアクセスします。
* **Stop/Start Server**: ユーザーはサーバーを停止および開始できます。
* **Automatic Backups**: 最大 35 日間の保持期間を設定可能な組み込みの毎日のバックアップ。
* **Role-Based Access**: Azure Active Directory を通じてユーザー権限と管理アクセスを制御します。
* **Security and Networking**: セキュアなデータベースアクセスのためにサーバーファイアウォールルールを管理し、必要に応じて仮想ネットワーク構成を切り離すことができます。
* **Managed Identities**: サーバーが資格情報を保存せずに他の Azure サービスと安全に認証できるようにします。これは、システム割り当ての管理された ID にアクセスできる他のサービスによってアクセスされるユーザー割り当ての管理された ID です。

### Enumeration

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List servers in a resource group
az postgres flexible-server list --resource-group <resource-group-name>
# List databases in a flexible-server
az postgres flexible-server db list --resource-group <resource-group-name> --server-name <server_name>
# Show specific details of a Postgre database
az postgres flexible-server db show --resource-group <resource-group-name> --server-name <server_name> --database-name <database_name>

# List firewall rules of the a server
az postgres flexible-server firewall-rule list --resource-group <resource-group-name> --name <server_name>
# List parameter values for a felxible server
az postgres flexible-server parameter list --resource-group <resource-group-name> --server-name <server_name>
# List private link
az postgres flexible-server private-link-resource list --resource-group <resource-group-name> --server-name <server_name>

# List all ad-admin in a server
az postgres flexible-server ad-admin list --resource-group <resource-group-name> --server-name <server_name>
# List all user assigned managed identities from the server
az postgres flexible-server identity list --resource-group <resource-group-name> --server-name <server_name>

# List the server backups
az postgres flexible-server backup list --resource-group <resource-group-name> --name <server_name>
# List all read replicas for a given server
az postgres flexible-server replica list --resource-group <resource-group-name> --name <server_name>
# List migrations
az postgres flexible-server migration list --resource-group <resource-group-name> --name <server_name>

# Get the server's advanced threat protection setting
az postgres flexible-server advanced-threat-protection-setting show --resource-group <resource-group-name> --name <server_name>
# List all of the maintenances of a flexible server
az postgres flexible-server maintenance list --resource-group <resource-group-name> --server-name <server_name>
# List log files for a server.
az postgres flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>

```
{{#endtab }}

{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.PostgreSql

# List flexible-servers in a resource group
Get-AzPostgreSqlFlexibleServer -ResourceGroupName <resource-group-name>
# List databases in a flexible-server
Get-AzPostgreSqlFlexibleServerDatabase -ResourceGroupName <resource-group-name> -ServerName <server_name>

# List firewall rules of the a flexible-server
Get-AzPostgreSqlFlexibleServerFirewallRule -ResourceGroupName <resource-group-name> -ServerName <server_name>

# List configuration settings of a flexible server
Get-AzPostgreSqlFlexibleServerConfiguration -ResourceGroupName <resource-group-name> -ServerName <server_name>
# Get the connection string for a flexible server
Get-AzPostgreSqlFlexibleServerConnectionString -ResourceGroupName <resource-group-name> -ServerName <server_name> -Client <client>

Get-AzPostgreSqlFlexibleServerLocationBasedCapability -Location <location>

# List servers in a resource group
Get-AzPostgreSqlServer -ResourceGroupName <resource-group-name>

```
{{#endtab }}
{{#endtabs }}

### 接続

拡張機能 rdbms-connect を使用すると、次のようにデータベースにアクセスできます:
```bash
az postgres flexible-server connect -n <server-name> -u <username> -p <password> --interactive

#or execute commands
az postgres flexible-server execute \
-n <server-name> \
-u <username> \
-p "<password>" \
-d <database-name> \
--querytext "SELECT * FROM <table-name>;"

```
または
```bash
psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser <database-name>
```
## 参考文献

- [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview)

## 権限昇格

{{#ref}}
../az-privilege-escalation/az-postgresql-privesc.md
{{#endref}}

## ポストエクスプロイト

{{#ref}}
../az-post-exploitation/az-postgresql-post-exploitation.md
{{#endref}}

## ToDo

* ad-adminでアクセスする方法を探して、これは権限昇格の手法であることを確認する


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