Az - PostgreSQL Privesc
Reading time: 6 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
PostgreSQL Privesc
SQL Databaseに関する詳細情報は、以下を確認してください:
Microsoft.DBforPostgreSQL/flexibleServers/read
&& Microsoft.DBforPostgreSQL/flexibleServers/write
この権限を持つことで、Azure上でPostgreSQL Flexible Serverインスタンスを作成、更新、または削除できます。これには、新しいサーバーのプロビジョニング、既存のサーバー構成の変更、またはサーバーの廃止が含まれます。
az postgres flexible-server create \
--name <ServerName> \
--resource-group <ResourceGroupName> \
--location <Location> \
--admin-user <AdminUsername> \
--admin-password <AdminPassword> \
--sku-name <SkuName> \
--storage-size <StorageSizeInGB> \
--tier <PricingTier> \
--version <PostgreSQLVersion>
例えば、これらの権限はPostgreSQLのパスワードを変更することを許可します。これは、もちろんPostgreSQL認証が有効な場合に役立ちます。
az postgres flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
さらに、権限を使用して、割り当てられたアイデンティティを有効にし、サーバーに接続されたマネージドアイデンティティで操作できます。ここでは、Azure PostgreSQL フレキシブル サーバーがサポートするすべての拡張機能を見つけることができます https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/reference-extensions。これらの拡張機能を使用するには、いくつかのサーバーパラメーター (azure.extensions) を変更する必要があります。たとえば、Azure Storage にアクセスできるマネージドアイデンティティを使用する場合は、次のようになります。
まず、パラメーターを変更し、割り当てられたアイデンティティが有効になっていることを確認します:
az postgres flexible-server parameter set \
--resource-group <YourResourceGroupName> \
--server-name <YourServerName> \
--name azure.extensions \
--value "AZURE_STORAGE"
az postgres flexible-server identity update \
--resource-group <YourResourceGroupName> \
--server-name <YourServerName> \
--system-assigned Enabled
CREATE EXTENSION IF NOT EXISTS azure_storage;
CREATE EXTERNAL DATA SOURCE ManagedIdentity
SELECT azure_storage.account_add('<storage-account>', '<storage-key>');
SELECT *
FROM azure_storage.blob_get(
'<storage-account>',
'<container>',
'message.txt',
decoder := 'text'
) AS t(content text)
LIMIT 1;
パブリックアクセスを有効にする必要があります。プライベートエンドポイント以外からアクセスしたい場合は、これを有効にするには:
az postgres flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
Microsoft.DBforPostgreSQL/flexibleServers/read
, Microsoft.DBforPostgreSQL/flexibleServers/write
, Microsoft.DBforPostgreSQL/flexibleServers/backups/read
, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
この権限を使用すると、バックアップからサーバーを復元できます:
az postgres flexible-server restore \
--resource-group <RESOURCE_GROUP> \
--name <NEW_SERVER_NAME> \
--source-server <SOURCE_SERVER_NAME> \
--restore-time "<ISO8601_TIMESTAMP>" \
--yes
Microsoft.DBforPostgreSQL/flexibleServers/read
, Microsoft.DBforPostgreSQL/flexibleServers/write
, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
, Microsoft.DBforPostgreSQL/flexibleServers/administrators/write
&& Microsoft.DBforPostgreSQL/flexibleServers/administrators/read
この権限を持つことで、PostgreSQL Flexible ServerのAzure Active Directory (AD) 管理者を構成できます。これは、自分自身または他のアカウントをAD管理者として設定することで悪用でき、PostgreSQLサーバーに対する完全な管理権限を付与します。既存のプリンシパルの更新はまだサポートされていないため、作成されている場合は最初に削除する必要があります。
フレキシブルサーバーには、使用するためのユーザー割り当てのマネージドアイデンティティが必要です。
az postgres flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--display-name <ADAdminDisplayName> \
--identity <IdentityNameOrID> \
--object-id <ObjectID>
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。