
ZoneMinder Zeitbasierte SQL-Injection (CVE-2024-51482) Exploit POC
Dieses Repository enthält einen leistungsstarken, parallelisierten Proof-of-Concept (PoC)-Exploit (Exploit.py) für eine Blind-SQL-Injection-Schwachstelle in ZoneMinder Versionen 1.37.* bis 1.37.64.
Laut GHSA-qm8h-3xvf-m7j3 liegt die Schwachstelle in web/ajax/event.php bei der Verarbeitung der Aktion removetag. Der Parameter tid (TagId) wird aus der Anfrage gelesen und unsicher direkt in eine SQL-Anweisung eingefügt:
$tagId = $_REQUEST['tid'];
// ...
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId";
$rowCount = dbNumRows($sql);
Da $tagId nicht parametrisiert wird, bevor es an dbNumRows() übergeben wird, kann ein authentifizierter Angreifer mit booleschen oder zeitbasierten SQL-Injection-Techniken (der hier vorgestellte PoC nutzt SLEEP()) beliebige SQL-Befehle injizieren.
Dies ermöglicht die vollständige Kontrolle über die SQL-Datenbanken, was zu einem Verlust der Datenvertraulichkeit und -integrität sowie potenziell zu Denial-of-Service (DoS) durch dauerhafte Sleep-Befehle führt.
Ab Version 1.37.65 wurden die SQL-Abfragen ordnungsgemäß parametrisiert. Der anfällige Block wurde korrigiert, um eine sichere Abfrage zu erstellen:
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId);
Das v2.0 FAST EXPLOIT-Skript beschleunigt die Datenextraktion um bis zu 5x durch Multi-Threading, eine optimierte Zeichenhäufigkeitssuche und dynamische Schwellenwertkalibrierung, um aggressiv Benutzeranmeldedaten (Username:Password) aus der Datenbanktabelle zm.Users zu extrahieren.
Exploit.py v2.0 FAST EXPLOIT)zm.Users-Tabelle.http://<target>/zm/index.phpview=request&request=event&action=removetagtidpython3 Exploit.py
Nach dem Start läuft das Skript im interaktiven Modus und fragt nach Folgendem:
index.php-Datei (z. B. http://zoneminder.local/zm/index.php).ZMSESSID-Cookie ein, die eine aktive Sitzung repräsentiert.zm.Users-Tabelle automatisch zu erkennen und auszulesen.Eine Datei namens extracted_data.txt wird automatisch mit den ausgelesenen Anmeldedaten (im Format Benutzername:Passwort) erstellt. Das Skript zeigt außerdem Echtzeit-Ausführungsstatistiken an, einschließlich der vergangenen Gesamtzeit und der Gesamtzahl der gesendeten HTTP-Anfragen.
Haftungsausschluss: Dieses Exploit-Skript ist ausschließlich für Bildungszwecke und autorisierte Penetrationstests bestimmt. Verwenden Sie dieses Tool nicht gegen Systeme, deren Eigentümer Sie nicht sind oder für die Sie keine ausdrückliche Erlaubnis zum Testen haben.