
ZoneMinder Time-Based SQL Injection (CVE-2024-51482) Exploit POC
Questo repository contiene un exploit proof-of-concept (PoC) ad alte prestazioni e parallelizzato (Exploit.py) per una vulnerabilità di blind SQL injection trovata nelle versioni di ZoneMinder 1.37.* fino alla 1.37.64.
Secondo GHSA-qm8h-3xvf-m7j3, la vulnerabilità ha origine in web/ajax/event.php quando viene gestita l'azione removetag. Il parametro tid (TagId) viene letto dalla richiesta e concatenato in modo non sicuro direttamente in un'istruzione SQL:
$tagId = $_REQUEST['tid'];
// ...
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId";
$rowCount = dbNumRows($sql);
Poiché $tagId non viene parametrizzato prima di essere passato a dbNumRows(), un attaccante autenticato può iniettare comandi SQL arbitrari utilizzando tecniche di SQL injection basate su boolean o basate sul tempo (la PoC presentata qui sfrutta SLEEP()).
Ciò consente il controllo totale dei database SQL, portando a una perdita di riservatezza e integrità dei dati e, potenzialmente, a un Denial of Service (DoS) tramite comandi sleep persistenti.
A partire dalla versione 1.37.65, le query SQL sono state correttamente parametrizzate. Il blocco vulnerabile è stato corretto per costruire una query sicura:
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId);
Lo script v2.0 FAST EXPLOIT accelera notevolmente l'estrazione dei dati, fino a 5 volte, utilizzando il multi-threading, una ricerca ottimizzata della frequenza dei caratteri e una calibrazione dinamica della soglia per estrarre in modo aggressivo le credenziali utente (Username:Password) dalla tabella del database zm.Users.
Exploit.py v2.0 FAST EXPLOIT)zm.Users.http://<target>/zm/index.phpview=request&request=event&action=removetagtidpython3 Exploit.py
Una volta eseguito, lo script funziona in modalità interattiva e richiede quanto segue:
index.php di ZoneMinder (ad es., http://zoneminder.local/zm/index.php).ZMSESSID valido che rappresenti una sessione attiva.zm.Users.Un file chiamato extracted_data.txt viene creato automaticamente con le credenziali estratte (nel formato Username:Password). Lo script mostra anche statistiche di esecuzione in tempo reale, tra cui il tempo totale trascorso e il numero totale di richieste HTTP inviate.
Disclaimer: Questo script exploit è inteso strettamente a scopo educativo e per test di penetrazione autorizzati. Non utilizzare questo strumento contro sistemi di cui non sei proprietario o per cui non possiedi un'autorizzazione esplicita a testare.