
Exploit POC pour injection SQL basée sur le temps dans ZoneMinder (CVE-2024-51482)
Ce dépôt contient un exploit de preuve de concept (PoC) haute performance et parallélisé (Exploit.py) pour une vulnérabilité d'injection SQL aveugle (Blind SQL Injection) trouvée dans les versions de ZoneMinder 1.37.* jusqu'à 1.37.64.
Selon Avis de sécurité GitHub GHSA-qm8h-3xvf-m7j3, la vulnérabilité provient de web/ajax/event.php lors du traitement de l'action removetag. Le paramètre tid (TagId) est lu depuis la requête et concaténé de manière non sécurisée directement dans une instruction SQL :
$tagId = $_REQUEST['tid'];
// ...
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId";
$rowCount = dbNumRows($sql);
Parce que $tagId n'est pas paramétré avant d'être passé à dbNumRows(), un attaquant authentifié peut injecter des commandes SQL arbitraires en utilisant des techniques d'injection SQL booléenne ou basée sur le temps (le PoC présenté ici utilise SLEEP()).
Cela permet un contrôle total des bases de données SQL, entraînant une perte de confidentialité et d'intégrité des données, et potentiellement un déni de service (DoS) via des commandes de sommeil persistantes.
Depuis la version 1.37.65, les requêtes SQL ont été correctement paramétrées. Le bloc vulnérable a été corrigé pour construire une requête sécurisée :
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId);
Le script v2.0 FAST EXPLOIT accélère considérablement l'extraction de données jusqu'à 5x en utilisant le multi-threading, une recherche optimisée de fréquence de caractères et un calibrage dynamique du seuil pour extraire de manière agressive les identifiants utilisateur (Nom d'utilisateur:Mot de passe) de la table zm.Users.
Exploit.py v2.0 FAST EXPLOIT)zm.Users.http://<target>/zm/index.phpview=request&request=event&action=removetagtidpython3 Exploit.py
Lors de l'exécution, le script fonctionne en mode interactif et demande ce qui suit :
index.php de ZoneMinder (par exemple, http://zoneminder.local/zm/index.php).ZMSESSID valide représentant une session active.zm.Users.Un fichier nommé extracted_data.txt est automatiquement créé avec les identifiants extraits (au format Nom d'utilisateur:Mot de passe). Le script affiche également des statistiques d'exécution en temps réel, y compris le temps écoulé total et le nombre total de requêtes HTTP envoyées.
Avertissement : Ce script d'exploitation est strictement destiné à des fins éducatives et à des tests de pénétration autorisés. N'utilisez pas cet outil contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation explicite de tester.