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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
FOISted — MikroTik remote jailbreak for v6.x.x | Kitploit
أدوات/GitHubGitHub/marginresearch/foisted
Embedded Systems SecurityPrivilege EscalationIoT SecurityExploitationPost-ExploitationNetwork SecurityPenetration TestingRed TeamingBinary Exploitation
GitHubmarginresearch/foisted

FOISted

MikroTik remote jailbreak for v6.x.x

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

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
عرض المستودع
root@kitploit:~
  ______ ____ _____  _____ _           _ 
 |  ____/ __ \_   _|/ ____| |         | |
 | |__ | |  | || | | (___ | |_ ___  __| |
 |  __|| |  | || |  \___ \| __/ _ \/ _` |
 | |   | |__| || |_ ____) | ||  __/ (_| |
 |_|    \____/_____|_____/ \__\___|\__,_|

FOISted: كسر أمني عن بُعد لأجهزة MikroTik

الوصف

FOISted هو استغلال لثغرتين أمنيتين تتطلبان مصادقة في نظام RouterOS من MikroTik. يمكن استخدامه لكسر أمن أجهزة RouterOS عن بُعد للإصدارات من 6.34 (2016) حتى 6.49.6 (أحدث إصدار v6).

يحتوي هذا المستودع على سكربت استغلال للأجهزة التي تعمل بمعمارية x86. الثغرة موجودة أيضًا على إصدارات أجهزة أخرى؛ كتابة سلسلة ropchain تُترك كتمرين للقارئ :)

لمزيد من المعلومات، اطّلع على مقالنا حول دواخل RouterOS: https://margin.re/blog/pulling-mikrotik-into-the-limelight.aspx

الاستخدام

تلقائي بالكامل:

root@kitploit:~
$ python3 exploit.py -H <router_ip> -u <username> -p <password>

ثم لاحقًا:

root@kitploit:~
$ nc <router_ip> 1337

سيكتشف سكربت الاستغلال إصدار RouterOS وينشر سلسلة ropchain الصحيحة تلقائيًا. ملاحظة: حاليًا مدعوم فقط RouterOS بمعمارية x86.

إذا لم يتم التعرّف على إصدارك لسبب ما، يمكنك تمريره صراحةً باستخدام:

root@kitploit:~
-v <version> # مثال: 6.49.6

إذا كنت تشغّل هذا على إصدارات RouterOS أحدث من 6.49.6 (الأحدث وقت الإصدار العام)، فقد لا يكون إصدار RouterOS الخاص بك موجودًا في قاعدة بيانات الأدوات (./db). يمكنك بدلًا من ذلك تمرير المسار إلى /nova/bin/www وسيحاول سكربت الاستغلال تلقائيًا العثور على الأدوات المناسبة لسلسلة ropchain:

root@kitploit:~
-f /path/to/nova/bin/www

كيف يعمل؟

يستفيد FOISted من ثغرتين في RouterOS v6 لتمكين تنفيذ الأكواد عن بُعد. في هذا القسم نستعرض بعض المعرفة الأساسية حول IPC في RouterOS ونناقش الثغرتين.

ملاحظة: هذا القسم في الغالب نسخة مختصرة من مقالنا الكامل. تأكد من الاطلاع عليه لمزيد من التفاصيل!

IPC في RouterOS

داخل نظام RouterOS من MikroTik، تتواصل البرامج مع بعضها البعض باستخدام بروتوكول IPC مخصص.

حزم البيانات الفعلية هي رسائل Nova (nv::message داخليًا). توجد هذه الرسائل بصيغة شبيهة بـ JSON (قبل 6.38) وصيغة ثنائية متسلسلة:

nova message

لكل عملية عنوان ثابت داخل نظام RouterOS؛ على سبيل المثال /nova/bin/user عند العنوان 13 و /nova/bin/www عند العنوان 70. بالإضافة إلى ذلك، يمكن لكل برنامج تسجيل معالجات (handlers) تنفّذ وظيفة محددة في نطاق فرعي. على سبيل المثال، /nova/bin/user لديه معالج عند العنوان 4 يعمل كنقطة "تسجيل الدخول" ويقوم بالمصادقة للخدمات الأخرى:

login

اتصال IPC جزء أساسي من تشغيل RouterOS. يُستخدم من أجل:

  • تنفيذ المصادقة
  • تحديث/استرجاع معاملات الإعداد
  • إرسال تحديثات متكررة حول حالة العملية (مثل إحصائيات الشبكة)
  • فرض إدارة وصول المستخدمين
  • إشعار العمليات عند فصل أحد العملاء
  • ... والعديد من الأمور الأخرى

أثناء جهودنا في الهندسة العكسية، كتبنا أداة تتبّع رسائل داخلية تسمح لنا بتصوّر جميع الرسائل المتبادلة أثناء تشغيل الراوتر.

في العرض التالي، يمكنك رؤية جميع الرسائل المتبادلة أثناء التنقّل في الواجهة الويب: https://youtu.be/Em1hVWnbzQ4

watch

الثغرة 1: FoisHandler

واجهة الويب في RouterOS منفّذة في ملف /nova/bin/www. ومع ذلك، قد تتم معالجة صفحات محددة بواسطة مكتبات "Servlet" منفصلة تنفّذ وظائفها في مكتبات مشتركة مستقلة.

على سبيل المثال، يتعامل سيرفليت jsproxy.p مع الطلبات الموجهة إلى /jsproxy وسيرفليت winbox.p يتعامل مع الطلبات الموجهة إلى /winbox، إلخ...

هذه السيرفلتات مكتبات يتم تحميلها داخل /nova/bin/www في أول مرة تكون هناك حاجة إليها. على سبيل المثال، في أول مرة نحمل فيها /jsproxy، سيتم تحميل مكتبة jsproxy.p في مساحة الذاكرة.

أثناء عملية تحميل المكتبة هذه، لاحظنا بعض الحركة المثيرة للاهتمام في أداة تتبّع الرسائل:

sus

تحديدًا، وجدنا رسالة يتم إرسالها من ملف www إلى المعالج رقم 2 في www. هذا مريب بالفعل لأن IPC في RouterOS مخصص للتواصل بين العمليات وليس للتواصل داخل نفس العملية...

بالإضافة إلى ذلك، لاحظنا أن اثنتين من الوسائط تبدوان كمؤشرات افتراضية (x86 32-بت) مما أثار اهتمامنا لأنه كان أمرًا غير معتاد.

عند فحص الدوال الفعلية داخل المعالج رقم 2 في /nova/bin/www، وجدنا دالة باسم FoisHandler::cmdUnknown يتم تشغيلها عند استلام هذه الأنواع من الرسائل.

والأمر المذهل أن هذه الدالة تسحب المعامل 0x11 من الرسالة و_تستدعيه كدالة_ باستخدام اثنين من المعاملات الأخرى كوسائط!

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

إرسال رسائل IPC

توجد عدة طرق لإرسال رسائل IPC داخلية كمستخدم في RouterOS. في الواقع، تتيح جميع العملاء الخارجيين إرسال رسائل عشوائية بعد المصادقة:

  • Winbox (يُستخدم عبر المنفذ 8291) -- يُستخدم بواسطة عميل winbox.exe
  • MAC Telnet -- يُستخدم للاتصال عندما لا يملك الراوتر عنوان IP
  • WebFig -- يُستخدم بواسطة واجهة الويب الأمامية

تختلف هذه الواجهات في طريقة تنفيذ مصافحة المصادقة الأولية، لكن بعد المصادقة، تمكّن المستخدم من تمرير رسائل Nova عشوائية إلى النظام الداخلي. راجع مقالنا ومستودعنا للهندسة العكسية للبروتوكولات التشفيرية في Winbox و MAC Telnet!

في هذا التنفيذ للاستغلال، نستخدم نقطة WebFig كآليتنا الأساسية للتواصل. انظر webfig.py لتنفيذ عميلنا المُهندَس عكسيًا.

ومع ذلك، توجد مشكلة عند محاولة استدعاء نقطة FoisHandler الضعيفة:

يمكن لكل معالج في RouterOS تعريف قناع صلاحيات (policy) يحدد المستخدمين المسموح لهم باستدعائه. يتضح أن FoisHandler لديه سياسة 0x80000000 والتي تشير إلى وصول داخلي فقط (أي الرسائل القادمة من عمليات النظام الأخرى).

كمستخدم إداري، أقصى قناع صلاحيات يمكننا تعيينه عبر الواجهة الرسومية هو فقط 0x7fffe وهو غير كافٍ.

الثغرة 2: تصعيد الصلاحيات

هذا يقودنا إلى ثغرتنا الثانية: تصعيد صلاحيات من مسؤول إلى "مسؤول فائق".

بينما تتيح لنا الواجهة الرسومية فقط تعيين قناع صلاحيات بقيمة 0x7fffe، إلا أنها داخليًا في الواقع ترسل رسالة IPC فقط مع احتواء أحد الحقول على قيمة قناع الصلاحيات:

permission

لذا يمكننا ببساطة تزوير رسالتنا الخاصة مع تعيين قيمة قناع الصلاحيات إلى 0xffffffff!

بمجرد فعل ذلك، لدينا الآن وصول غير مقيد لضرب أي نقطة في النظام!

تنفيذ الاستغلال

يبدأ استغلالنا برفع ملفين إلى النظام عبر FTP:

  • stage2: يحتوي على مولّد قشرة عكسية يستمع على المنفذ 1337
  • busybox: يوفّر لنا بيئة قشرة مناسبة

بعد ذلك، ينفّذ استغلالنا تصعيد الصلاحيات لتمكيننا من الوصول إلى نقطة FoisHandler.

أخيرًا، نرسل رسالة مصنوعة بعناية للتحوّل إلى سلسلة ropchain مضمّنة في الرسالة. تحسب سلسلة ropchain عنوان chmod و execve في uClibc وتنفّذ:

  • chmod 0777 stage2
  • execve stage2

بمجرد تشغيل stage2، يمكنك الاتصال بالمنفذ 1337 والحصول على قشرة!

الأسئلة الشائعة

هل يمكن للأشخاص استخدام هذا لاختراق الراوتر الخاص بي؟

لا، تتطلب كلتا الثغرتين بيانات اعتماد إدارية للاستغلال.

على أي إصدارات يعمل؟

توجد الثغرات على الأقل من 6.27 (أقدم برنامج تمكنا من تنزيله) حتى أحدث إصدار v6: 6.49.6. تمت إعادة هيكلة الواجهة الويب في RouterOS v7 وتمت إزالة المعالج الضعيف بالكامل. إثبات المفهوم الخاص بنا مكتوب لمعمارية x86.

يعمل سكربت الاستغلال (تم اختباره!) ضد كل إصدارات RouterOS من 6.34 إلى 6.49.6.

تنزيل الأداة