githubEdit

RCE with PostgreSQL Languages

circle-check

PostgreSQL Languages

The PostgreSQL database you got access to may have different scripting languages installed that you could abuse to execute arbitrary code.

You can get them running:

\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)

circle-exclamation
triangle-exclamation

Note that it's possible to compile the secure versions as "unsecure". Check thisarrow-up-right for example. So it's always worth trying if you can execute code even if you only find installed the trusted one.

plpythonu/plpython3u

pgSQL

Check the following page:

PL/pgSQL Password Bruteforcechevron-right

C

Check the following page:

RCE with PostgreSQL Extensionschevron-right
circle-check

Last updated