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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ermir — سجل RMI مارق يستغل إلغاء تسلسل Java غير الآمن عبر طرق list/lookup/bind. يقوم بتوليد وتسليم أدوات Ysoserial لتفعيل تنفيذ الأكواد عن بُعد على العملاء الضعفاء. | Kitploit
أدوات/GitHubGitHub/hakivvi/ermir
توليد الحمولةتحليل الثغرات الأمنيةالاستغلالاختبار الاختراق
GitHubhakivvi/ermir

ermir

سجل RMI مارق يستغل إلغاء تسلسل Java غير الآمن عبر طرق list/lookup/bind. يقوم بتوليد وتسليم أدوات Ysoserial لتفعيل تنفيذ الأكواد عن بُعد على العملاء الضعفاء.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

Ermir

إرمير هو سجل RMI شرير/مخادع، يستغل إلغاء التسلسل غير الآمن (deserialization) على أي كود جافا يستدعي طرق RMI القياسية عليه (list()/lookup()/bind()/rebind()/unbind()).

المتطلبات

  • روبي الإصدار 3 أو أحدث.

التثبيت

قم بتثبيت إرمير من rubygems.org:

root@kitploit:~
$ gem install ermir

أو استنساخ المستودع وبناء الجوهرة:

root@kitploit:~
$ git clone https://github.com/hakivvi/ermir.git
$ rake install

الاستخدام

إرمير هو جوهرة واجهة سطر أوامر، تأتي مع ملفي CLI: ermir و gadgetmarshal. ermir هو الجوهرة الفعلية والأخير هو مجرد واجهة جميلة لملف GadgetMarshaller.java والذي يعيد كتابة أدوات Ysoserial لتتوافق مع متطلبات MarshalInputStream، يجب بعد ذلك توجيه المخرجات إلى ermir أو إلى ملف، وفي حالة الأدوات المخصصة استخدم MarshalOutputStream بدلاً من ObjectOutputStream لكتابة الكائن المسلسل إلى تيار الإخراج.

استخدام ermir:

root@kitploit:~
➜  ~ ermir
Ermir by @hakivvi * https://github.com/hakivvi/ermir.
Info:
    Ermir is a Rogue/Evil RMI Registry which exploits unsecure Java deserialization on any Java code calling standard RMI methods on it.
Usage: ermir [options]
    -l, --listen   bind the RMI Registry to this ip and port (default: 0.0.0.0:1099).
    -f, --file     path to file containing the gadget to be deserialized.
    -p, --pipe     read the serialized gadget from the standard input stream.
    -v, --version  print Ermir version.
    -h, --help     print options help.
Example:
    $ gadgetmarshal /path/to/ysoserial.jar Groovy1 calc.exe | ermir --listen 127.0.0.1:1099 --pipe

استخدام gadgetmarshal:

root@kitploit:~
➜  ~ gadgetmarshal
Usage: gadgetmarshal /path/to/ysoserial.jar Gadget1 cmd (optional)/path/to/output/file

كيف يعمل؟

تقدم java.rmi.registry.Registry 5 طرق: list()، lookup()، bind()، rebind()، unbind():

  • public Remote lookup(String name): lookup() يبحث عن كائن مرتبط في السجل باسمه. يقوم السجل بإرجاع كائن Remote يشير إلى الكائن البعيد الذي تم البحث عنه. يُقرأ الكائن المُعاد باستخدام MarshalInputStream.readObject() وهو مجرد طبقة أخرى فوق ObjectInputStream، بشكل أساسي يتوقع بعد كل واصف فئة/وكيل (TC_CLASSDESC/TC_PROXYCLASSDESC) عنوان URL سيُستخدم لتحميل هذه الفئة أو فئة الوكيل. هذا هو نفس الخطأ الخطير الذي تم إصلاحه في jdk7u21. (لا يحدد إرمير عنوان URL هذا لأن إصدارات جافا القديمة فقط هي الضعيفة، بدلاً من ذلك يكتب null). نظرًا لأن أدوات Ysoserial تُسلسل باستخدام ObjectOutputStream، يستخدم إرمير gadgetmarshal -وهو غلاف حول GadgetMarshaller.java- لتسلسل الأداة المحددة لتتوافق مع متطلبات .

PoC

ermir

المساهمة

تقرير الأخطاء وطلبات السحب مرحب بها على GitHub على https://github.com/hakivvi/ermir. هذا المشروع يهدف إلى أن يكون مساحة آمنة ومرحبة للتعاون، ويُتوقع من المساهمين اتباع مدونة قواعد السلوك.

الترخيص

الجوهرة متاحة كمصدر مفتوح بموجب شروط ترخيص MIT.

مدونة قواعد السلوك

من المتوقع من كل من يتفاعل في مشروع إرمير، سواء في قواعد الكود، متتبعات المشكلات، غرف الدردشة، أو القوائم البريدية، اتباع مدونة قواعد السلوك.

تنزيل الأداة
MarshalInputStream
image
  • public String[] list(): list() يطلب من السجل جميع أسماء الكائنات المرتبطة. بينما لا يمكن استبدال النوع String بأداة ضارة لأنه ليس مثل أي كائن عادي ولا يُقرأ باستخدام readObject() بل readUTF()، ومع ذلك، list() يُرجع String[] وهو كائن فعلي ويُقرأ باستخدام readObject()، ويرسل إرمير الأداة بدلاً من هذا النوع String[]. image

  • public void bind(java.lang.String $param_String_1, java.rmi.Remote $param_Remote_2): bind() يربط كائنًا باسم في السجل. في حالة bind()، نوع الإرجاع هو void ولا شيء يتم إرجاعه، ومع ذلك، إذا حدد السجل في حزمة بيانات RMI المرتجعة أن هذا الإرجاع هو إرجاع استثنائي، فإن العميل/الخادم سيستدعي readObject() على الرغم من أن نوع الإرجاع void، هذه هي الطريقة التي يرسل بها السجل الاستثناءات إلى عميله (عادةً java.lang.ClassNotFoundException). مرة أخرى، سيقوم إرمير بتسليم الأداة المسلسلة بدلاً من كائن استثناء شرعي. image

  • public void rebind(java.lang.String $param_String_1, java.rmi.Remote $param_Remote_2): rebind() يستبدل ربط الاسم المُمرر بالمرجع البعيد المُقدم، ويعيد أيضًا void. يرجع إرمير استثناءً مثل bind().

  • public void unbind(java.lang.String $param_String_1): unbind() يفصل ربط كائن بعيد باسم في سجل RMI، هذا أيضًا يعيد void.