
هذا السكربت مخصص للتحقق من ثغرة Apache Struts 2 (CVE-2017-5638)، والمعروفة أيضًا باسم Struts-Shock.
هذا السكربت مخصص للتحقق من ثغرة Apache Struts 2 (CVE-2017-5638)، المعروفة أيضًا باسم Struts-Shock. وهو غير ضار تمامًا لأنه لا يحقن أي حمولة خبيثة، بل يكتفي بحقن ترويسة HTTP تُسمى 'STRUTS2-VALIDATION' من أجل التحقق مما إذا كان الهدف عرضة للثغرة.
بفضل قدرته على تعدد الخيوط (multithreading)، يمكنه فحص أكثر من 2.5 ألف تطبيق موزعة حول العالم في أقل من 10 دقائق. لذلك، يمكن أن يكون مفيدًا جدًا في التحقق من التطبيقات المؤسسية على نطاق واسع.
cve-2017-5638 عينة موقع قابل للاستغلال
يهدف هذا المشروع إلى توضيح استغلال ثغرة CVE-2017-5638 لأغراض تعليمية. لمزيد من المعلومات، انظر https://cwiki.apache.org/confluence/display/WW/S2-045
أُعدّ هذا المشروع لأغراض التعليم والاختبار الأخلاقي فقط. مهاجمة الأهداف دون موافقة مسبقة متبادلة أمر غير قانوني. وتقع على عاتق المستخدم النهائي مسؤولية الامتثال لجميع القوانين المحلية والولائية والاتحادية المعمول بها. لا يتحمل المطوّرون أي مسؤولية ولا يُعتبرون مسؤولين عن أي إساءة استخدام أو ضرر ناتج عن هذا البرنامج.
docker run -d -p 8080:8080 jrrdev/cve-2017-5638:latest
حمّل سكربت الاستغلال على جهاز المهاجم من هنا
شغّل سكربت الاستغلال المكتوب بلغة Python من جهاز المهاجم:
python exploit.py http://<DOCKER_HOST>:8080/hello "ls -l"
توجد طريقتان لتشغيل هذا السكربت: مع تعدد الخيوط أو بدونه، والفرق الوحيد هو وقت التنفيذ. لتفعيل خاصية تعدد الخيوط، يكفي تمرير معامل thread.
يجب أن يكون المعامل الأول ملفًا بصيغة TXT يحتوي على جميع عناوين URL المستهدفة، عنوان واحد في كل سطر. يُرجى ملاحظة أن هذه العناوين يجب أن تكون كاملة، على سبيل المثال: https://target.com/admin/myStrutsPage.action
فيما يلي مثال على الاستخدام بدون تعدد الخيوط:
struts-shock-validation.py target_urls.txt
الآن مع استخدام خاصية الخيوط:
struts-shock-validation.py target_urls.txt thread
http://struts.apache.org/docs/s2-016.html https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017
وحدة استغلال إطار عمل Metasploit لثغرة Apache Struts في ترويسة Content-Type لم يتم اختبارها على خادم Windows، ولكن تم اختبارها على خادم Linux باستخدام حمولة generic/shell_bind_tcp
مثال لكود PoC لثغرة CVE-2017-5638 | استغلال Apache Struts | DORK: ext:action
الاستخدام: python struts.py https://victim.site dir
سكربت Python الأول الذي تم نشره لم يقم بتنسيق ترويسة Content-Type بشكل صحيح. أعدت كتابة ترويسة Content-Type لتنسيقها بشكل صحيح على النحو التالي: Content-Type:%20{Exploit}. كما أضفت تسجيلًا (logging) وRequests، ثم قمت بتفريغ خصائص الكائن إلى stdout.
مثال على المخرجات
التحقق من CVE-2017-5638 بواسطة XSS.Cx
Volume in drive D has no label. Volume Serial Number is 2A7B-A245 Directory of d:\Program Files\Apache Software Foundation\Tomcat 9.0
هذا المشروع هو دليل إثبات للمفهوم (Proof of Concept) لثغرة Apache Struts. كان الهدف هو إنشاء برنامج يمكنه توليد واختبار عناوين IP عشوائية للتحقق من الثغرة الموصوفة أعلاه.
استخدم هذا المشروع على مسؤوليتك الخاصة ولأغراض تعليمية فقط.
cURL
Nmap
توليد عناوين IP عشوائية وحفظها في ملف نصي.
./get_ip.sh [Number of hosts to scan] [What port to scan] [Filename to write output]
./get_ip.sh 10000 80 output.txt
التحقق من وجود الثغرة لعنوان IP محدد.
./struts_check.sh [ip address] [port]
./struts_check.sh 127.0.0.1 80
التحقق من وجود الثغرة لقائمة من عناوين IP.
./main.sh [Text file containing IP adresses] [Port]
./main.sh output.txt 443
تنفيذ أمر على خادم بدون تصحيح ثغرة Apache Struts
./struts_attack.sh [IP Adres] [Command]
./struts_attack.sh https://127.0.0.1 whoami
# CVE-2017-5638 كود PoC بلغة Python | DORK: ext:action
مثال لكود PoC لثغرة CVE-2017-5638 | استغلال Apache Struts | DORK: ext:action
الاستخدام: python struts.py https://victim.site dir
سكربت Python الأول الذي تم نشره لم يقم بتنسيق ترويسة Content-Type بشكل صحيح.
أعدت كتابة ترويسة Content-Type لتنسيقها بشكل صحيح على النحو التالي: Content-Type:%20{Exploit}.
كما أضفت تسجيلًا (logging) وRequests، ثم قمت بتفريغ خصائص الكائن إلى stdout.
مثال على المخرجات
التحقق من CVE-2017-5638 بواسطة XSS.Cx
Volume in drive D has no label.
Volume Serial Number is 2A7B-A245
Directory of d:\Program Files\Apache Software Foundation\Tomcat 9.0
## النتائج
سيقوم السكربت تلقائيًا بإنشاء مجلد باسم results، وفي كل عملية تنفيذ سينشئ مجلدًا مؤرخًا يحتوي على نتيجة التنفيذ. إذا تم تفعيل تعدد الخيوط، فسيُنشئ ملفًا واحدًا لكل خيط باسم thread_<number>، ويمكن تجاهله لأنه عند اكتمال العملية سيتم دمج نتائج جميع الخيوط في ملف TXT واحد بنفس الاسم (التاريخ/الطابع الزمني) الخاص بمجلد التنفيذ.