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
adminer_CVE-2021-43008 — Environnement de démonstration pour la vulnérabilité CVE-2021-43008 d’Adminer : observer l’impact réel et tester des mesures de mitigation. | Kitploit
Outils/GitHubGitHub/bamolitho/adminer_cve-2021-43008
Analyse des VulnérabilitésExploitationExploitation d'Applications WebApprentissage et ÉducationSécurité des Bases de DonnéesLabs et Pratique
GitHubbamolitho/adminer_cve-2021-43008

adminer_CVE-2021-43008

Environnement de démonstration pour la vulnérabilité CVE-2021-43008 d’Adminer : observer l’impact réel et tester des mesures de mitigation.

Voir le dépôt
13il y a 9 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

**CVE-2021-43008 — Vulnérabilité Adminer **

Lecture arbitraire de fichiers via un serveur MySQL malveillant

1. Qu’est-ce qu’Adminer ?

Adminer est un outil web (PHP) permettant d’administrer facilement des bases de données MySQL, PostgreSQL, SQLite ou SQL Server. Il est couramment déployé comme alternative légère à phpMyAdmin.

Versions concernées : Adminer ≤ 4.6.2


2. Quelle est la nature de la vulnérabilité ?

2.1. Défaillance d’Access Control

Adminer autorise la connexion à n’importe quel serveur MySQL distant. Or, lors de la connexion à un serveur MySQL, le client (ici Adminer) accepte :

  • un ensemble d’instructions initiales du serveur,
  • dont la commande LOAD DATA LOCAL INFILE, qui permet au serveur de demander au client de lui envoyer un fichier local.
  • 2.2. Problème

    Adminer ne valide pas correctement les réponses du serveur MySQL dans les versions vulnérables.

    Résultat : Un serveur MySQL contrôlé par un attaquant peut demander :

    “Lis ce fichier local sur la machine ou conteneur qui héberge Adminer et envoie-le moi.”

    Ce mécanisme est lié au paquet MySQL : 0xFB | filename → déclenche la lecture locale du fichier.

    Pourquoi la version 4.6.2 est vulnérable

    Adminer 4.6.2 permettait à un utilisateur de spécifier un serveur MySQL externe et de s’y connecter librement. Or, MySQL permettait en plus — par défaut — l’utilisation de :

    • LOAD DATA LOCAL INFILE
    • en mode automatique lorsque certains serveurs demandaient un fichier.

    Donc : Adminer → connecte au serveur malveillant → le serveur malveillant demande un fichier → Adminer l’envoie.

    C’est l’essence de la vulnérabilité.


    3. Conditions d’exploitation

    L’attaquant doit :

    1. Héberger un serveur MySQL malveillant (Rogue MySQL Server).
    2. Amener Adminer à se connecter à son serveur :
      • via une erreur de configuration,
      • via une interface exposée publiquement,
      • via une action d’un utilisateur (attaque de type “supply host”).
    3. Le serveur MySQL rogue renvoie un paquet LOAD DATA LOCAL INFILE.
    4. Adminer lit un fichier local.
    5. Le fichier est renvoyé à l’attaquant.

    Aucun mot de passe root n’est nécessaire pour exfiltrer un fichier local : c’est Adminer qui exécute l’action en tant qu'application PHP sur le serveur cible.


    4. Conséquences de la vulnérabilité

    4.1. Compromission de la confidentialité

    L’attaquant peut :

    • lire /etc/passwd (de l'entité qui héberge adminer : machine hôte ou conteneur),
    • lire /etc/shadow (selon les permissions de l’utilisateur PHP),
    • récupérer les fichiers de configuration,
    • voler les identifiants de connexions MySQL,
    • extraire toutes les informations accessibles par l’utilisateur web.

    4.2. Escalade d’impact

    Avec les identifiants MySQL volés (étape secondaire), il peut ensuite :

    • se connecter à la vraie base interne,
    • lire les données,
    • écrire dans les tables,
    • injecter des charges malveillantes.

    5. Démonstration pratique (PoC) — Architecture du lab

    Le PoC se fait dans un environnement isolé et conteneurisé pour éviter tout risque.

    5.1. Composants du lab

    1. Adminer vulnérable (version 4.6.2) Rôle : victime Exposé en local via localhost:8080
    2. MySQL légitime (optionnel) Rôle : simuler une base réelle
    3. Rogue MySQL Server (Python) Rôle : attaquant Il envoie les paquets 0xFB filename pour forcer Adminer à lire un fichier local.

    5.2. Structure du dossier

    root@kitploit:~
    adminer_CVE-2021-43008/
    │
    ├── README.md
    ├── docker-compose.yml
    │
    └──rogue_mysql_server/
    	├── rogue_mysql_server.py
    	├── requirements.txt
    	└── Dockerfile
    

    6. Déroulement du PoC : comment la vulnérabilité se manifeste ?

    6.1. Démarrer le lab

    root@kitploit:~
    docker compose build && docker compose up -d
    

    6.2. Connexion depuis Adminer au Rogue Server

    Dans http://localhost:8080 :

    • Système : MySQL
    • Serveur : rogue_mysql:33306
    • User : n’importe
    • Mot-de-passe : n’importe

    6.3. Déroulement automatique

    1. Adminer envoie le handshake.
    2. Le Rogue MySQL renvoie LOAD DATA LOCAL INFILE '/etc/passwd'.
    3. Adminer lit /etc/passwd.
    4. Adminer envoie son contenu au rogue.
    5. Le rogue stocke le texte dans stolen_file.txt.

    6.4. Résultat observé

    Utiliser la commande suivante pour observer les logs du rogue :

    root@kitploit:~
    docker logs -f rogue_mysql
    

    Résultat attendu :

    root@kitploit:~
    2025-11-27 16:59:54,248:INFO:Serving on ('0.0.0.0', 33306)
    2025-11-27 17:02:55,213:INFO:Conn from: ('172.18.0.3', 37200)
    2025-11-27 17:02:55,214:INFO:Last packet
    2025-11-27 17:02:55,214:INFO:Query
    2025-11-27 17:02:55,214:INFO:Requesting file: /etc/shadow
    2025-11-27 17:02:55,215:INFO:-- Received file data
    2025-11-27 17:02:55,215:INFO:Result length: 1 bytes
    2025-11-27 17:02:55,215:INFO:Last packet
    2025-11-27 17:02:55,216:INFO:Query
    2025-11-27 17:02:55,216:INFO:Requesting file: /etc/passwd
    2025-11-27 17:02:55,216:INFO:-- Received file data
    2025-11-27 17:02:55,217:INFO:Result length: 920 bytes
    2025-11-27 17:02:55,217:INFO:File content received: 919 bytes
    2025-11-27 17:02:55,217:INFO:File saved to stolen_file.txt
    

    Consulter le contenu du fichier stolen_file.txt :

    root@kitploit:~
    docker exec -it rogue_mysql sh
    

    Une fois à l'intérieur du conteneur, tu pourra visualiser les contenus des fichiers dont stolen_file.txt

    root@kitploit:~
    # ls
    mysql.log  requirements.txt  rogue_mysql_server.py  stolen_file.txt
    
    root@kitploit:~
    # cat stolen_file.txt
    

    Résultat :

    root@kitploit:~
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    games:x:5:60:games:/usr/games:/usr/sbin/nologin
    man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
    lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
    mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
    uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
    proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
    www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
    backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
    list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
    irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
    gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
    nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
    _apt:x:100:65534::/nonexistent:/bin/false
    

    Ce résultat démontre la vulnérabilité sans ambiguïté.

    7. Mesures de mitigation

    A. Mettre à jour Adminer (ça seule suffit)

    Solution la plus fiable : Passer à Adminer ≥ 4.6.3

    Les versions postérieures corrigent le comportement réseau.

    Ce qui a été corrigé dans les versions suivantes

    À partir d’Adminer 4.7.x, plusieurs protections ont été introduites :

    Adminer interdit désormais par défaut LOAD DATA LOCAL INFILE

    Soit :

    • désactivé complètement
    • ou activé uniquement lorsque explicitement autorisé par l’utilisateur

    → Résultat : ton rogue MySQL ne peut plus exfiltrer de fichiers.

    Adminer filtre les actions du client avant envoi au serveur

    Cela empêche les connexions externes d’utiliser des fonctions dangereuses.

    Mécanismes supplémentaires de validation d’entrée

    Les nouvelles versions vérifient :

    • si le serveur cible est celui attendu
    • si l’action n’est pas dangereuse
    • si la requête correspond bien à une action utilisateur légitime

    B. Désactiver les connexions externes

    Limiter Adminer aux seuls hôtes internes :

    • via firewall (OUTPUT + DOCKER NETWORKS),
    • via reverse proxy filtré,
    • via configuration réseau strictement localisée.

    L’Adminer de production doit toujours pointer vers un MySQL interne.


    C. Désactiver LOCAL INFILE côté MySQL

    Empêche le vol via client MySQL légitime :

    root@kitploit:~
    [mysqld]
    local_infile=0
    

    ou :

    root@kitploit:~
    SET GLOBAL local_infile=0;
    

    D. Ne jamais exposer Adminer publiquement

    Adminer ne doit pas être accessible sur Internet.

    En production :

    • accès limité via VPN,
    • SSO ou authentification forte,
    • expiration automatique.

    E. Supprimer Adminer après usage

    Adminer doit être vu comme un outil temporaire :

    • on le déploie pour une tâche ponctuelle,
    • on le supprime ensuite.

    8. Ressources et références fiables

    • Source du script python utilisé : https://github.com/Gifts/Rogue-MySql-Server/blob/master/rogue_mysql_server.py
    • Site officiel Adminer https://www.adminer.org/en/
    • Sansec (publication initiale) https://sansec.io/research/adminer-4.6.2-file-disclosure-vulnerability
    • Podalirius (explications techniques + PoC) https://podalirius.net/en/cves/2021-43008/
    • vulhub : https://github.com/vulhub/vulhub/blob/master/adminer/CVE-2021-43008/

    9. Résumé final

    CVE-2021-43008 est une vulnérabilité critique d’Adminer ≤ 4.6.2 qui permet :

    • à un attaquant contrôlant un serveur MySQL,
    • d'obliger Adminer à lire un fichier local,
    • puis à en exfiltrer le contenu vers l’attaquant.

    C’est une démonstration parfaite de l’importance :

    • du contrôle réseau,
    • des restrictions client MySQL,
    • de la non-exposition d’outils d’administration,
    • de la gestion des versions logicielles.

    Télécharger l’outil