مقال : برمجة Reverse TCP Shell بلغة البرمجة python
مختبري الإختراق يجب أن يكونوا مبرمجين محترفين قادرين على اكتشاف الثغرات وكتابة برامج لاستغلال الثغرات ، لكي تصل لهذه المرحلة وتتجاوز مرحلة استخدام أدوات الاختراق الجاهزة يجب أن تكون مبرمج محترف قادر على كتابة برامج الاستغلال الخاصة بك.
تعرفنا في مقال سابق على طرق استطلاع الهدف وجمع المعلومات عنه وقمنا بكتابة برامج بلغة البرمجة بايثون (لغة الهاكرز المفضلة) للقيام بهذه العملية بشكل اتوماتيكي. في هذا المقال سوف نتعرف على الشيل العكسية Reverse Shell وسوف نقوم بكتابة برنامج بسيط بلغة البايثون يسمح لنا بالحصول على شيل عكسية وفتح جلسة CMD مع الجهاز الهدف.
ماهي الشيل العكسية:
في الصوره السابقة يظهر جهاز مختبر الاختراق (تحت القبعة السوداء) وبالمقابل تظهر شبكة و جهاز الهدف الذي لا يحتوي على ثغرات ومحمي باستخدام جدار ناري firewall ومن الصعب الحصول على اتصال مباشر بين جهاز مختبر الاختراق وجهاز الهدف لأن الجدار الناري سوف يمنع أي محاولات اتصال قادمة من طرف خارجي، للتغلب على هذه المشكلة يمكن لمختبر الاختراق أن يقوم بخداع المستخدم الهدف باستخدام احدى طرق الهندسة الاجتماعية ليقوم بفتح ملف معين يجعل جهازه يتصل وبشكل عكسي مع جهاز مختبر الاختراق وفي نفس الوقت يجب على مختبر الاختراق أن يعًد جهازه لاستقبال الاتصال العكسي. الشيل في مثالنا هذا سوف يكون عبارة عن سطر أوامر الويندوز cmd.exe.
يمكننا الحصول على payloads تقوم بفتح جلسة اتصال عكسي باستخدام msfvenom ولكن هذا ال payloads قد أصبحت مكتشفة من قبل معظم مضادات الفيروسات، يوجد العديد من الأدوات التي يمكن أن تساعد مختبر الاختراق على تجاوز مضاد الفيروسات ولكن هذه الأدوات مع مرور الوقت قد تصبح أيضاً مكتشفة من قبل العديد من مضادات الفيروسات. لذلك أفضل طريقة لتجاوز الحماية المطبقة من قبل مضادات الفيروسات هي أن يقوم مختبر الاختراق بكتابة payload الخاص به وعندها لن يستطيع أي مضاد فيروسات اكتشافه.
سوف نقوم بكتابة payload بلغة البايثون يقوم بفتح اتصال عكسي reverse tcp shell وفي المقابل سوف نقوم بكتابة برنامج بسيط يقوم بإعداد جهازنا (نظام كالي) لاستقبال الاتصال العكسي وفتح شيل عكسية وكتابة وتنفيذ تعليمات على الجهاز الهدف.
بيئة الاختبار:
-
جهاز مختبر الاختراق (kali Linux)
-
جهاز الهدف (Windows 7)
الكود من جهة مختبر الاختراق Server- TCP Reverse Shell والذي سوف يقوم بالتنصت والانتظار حتى يتم الاتصال به :
في البداية قمنا باستيراد socket module ثم قمنا بتعريف التابع connect() والذي يقوم بخلق socket جديدة تعمل على عنوان IP الخاص بنظام الكالي ورقم المنفذ المحدد مسبقاً (يجب أن نستخدم نفس المنفذ في الكود الخاص ببرنامج الهدف) , هذا التابع يقوم بالإنصات على عنوان IP ورقم المنفذ المحدد للقيام باستقبال الاتصال العكسي من الجهاز الهدف وفي حال نجاح الاتصال يقوم بطباعة رسالة تؤكد نجاح العملية.
وفي جسم التابع قمنا أيضاً بتعريف حلقة while وفي جسم هذه الحلقة قمنا بتعريف متغير له الاسم command يحوي على التعليمات التي سوف نقوم بإدخالها , في حال قمنا بكتابة التعليمة terminate فسوف يتم انهاء الجلسة وقطع الاتصال مع الجهاز الهدف وإلا فسوف يتم إرسال نص التعليمة التي نقوم بكتابتها وطباعة نتيجة تنفيذ هذه التعليمة على الشاشة. وفي نهاية الكود البرمجي قمنا بتعريف التابع الرئيسي main() وفي داخله قمنا باستدعاء التابع connect()
الكود من جهة الهدف : Client – TCP Reverse Shell
في البداية قمنا باستيراد socket وقمنا باستيراد subprocess من أجل التعامل مع عمليات الإدخال والاخراج في النظام الهدف, ثم قمنا بتعريف التابع connect() والذي يقوم بخلق socket جديدة تعمل على العنوان IP الخاص بجهاز مختبر الاختراق (عملية الاتصال العكسي) ونفس رقم المنفذ المستخدم في جهاز مختبر الاختراق وفي جسم هذا التابع قمنا بتعريف حلقة while لضمان استمرار استقبال التعليمات من جهاز مختبر الاختراق. التعليمة terminate تستخدم من أجل انهاء الجلسة وقطع الاتصال والا فسوف نقوم بفتح سطر CMD في الجهاز الهدف والسماح له باستقبال وتنفيذ التعليمات التي يتم إرسالها من قبل مختبر الاختراق
-
s.send( CMD.stdout.read() ): لإرسال نتيجة تنفيذ التعليمة إلى جهاز مختبر الاختراق.
-
s.send( CMD.stderr.read() ): لإرسال رسالة خطأ في حال تم كتابة تعليمة خاطئة.
وفي نهاية البرنامج قمنا بتعريف التابع الرئيسي main() وقمنا في داخله باستدعاء التابع connect()
عند تشغيل البرنامج في جهاز مختبر الاختراق سوف نحصل على الرسالة التالية:
البرنامج ينصت على البورت المحدد لاستقبال الاتصال العكسي.
يجب أن نقوم بإرسال البرنامج الثاني إلى الهدف وإقناعه بفتحه باستخدام الهندسة الاجتماعية ولكن هذا البرنامج هو كود بايثون ماذا لو كان جهاز الهدف لا يحوي على برنامج بايثون. يمكننا ببساطة تحويل هذا البرنامج إلى برنامج تنفيذي له الامتداد exe باستخدام py2exe ومن ثم إرساله إلى الهدف.
Py2exe:
هذه الأداة تسمح لنا بتحويل برامج مكتوبة بلغة البايثون ولها الامتداد py إلى برامج تنفيذية لها الامتداد exe . بعد أن تقوم بتحميل نسخة py2exe المتوافقة مع نظامك وتنصيبها يجب أن تقوم بخلق مجلد جديد يحوي على الملفات التالية:
-
Client.py: البرنامج المراد تحويله لبرنامج تنفيذي
-
py2exe.exe
-
setup.py: برنامج صغير يجب أن تقوم أنت بكتابته
بعد تشغيل البرنامج setup.py سوف نحصل على مجلدين كما يظهر في الشكل التالي:
البرنامج التنفيذي سيكون في المجلد dist
الآن يمكنك تغير اسم هذا الملف وإرساله للهدف وعندما يقوم الهدف بفتحه سوف نحصل على شيل عكسية تسمح لنا بتنفيذ تعليمات على الجهاز الهدف
التعليمة التالية تستخدم لعرض الملفات الموجودة في المسار الحالي في جهاز الهدف:
في حال كتابة تعليمة خاطئة سوف تظهر رسالة خطأ مع المحافظة على جلسة الاتصال العكسي مع الجهاز الهدف:
من أجل انهاء الجلسة وقطع الاتصال يمكننا استخدام التعليمة terminate .
في المقالات القادمة إن شاء الله سوف نقوم بكتابة برنامج بلغة البايثون يسمح لنا بالحصول على جلسة اتصال عكسي reverse http shell وسوف نقوم بتطور هذه البرامج لتسمح لنا بتحميل ورفع الملفات من وإلى الجهاز الهدف وسوف نقوم بكتابة برامج بلغة البايثون لتثبيت الاستغلال وتجاوز الصلاحيات.
مقالات جميلة جدا
بس ياريت ما تتأخر بعمل مثل هذه المقالات
او تعمل كتاب لهذه الاشياء مقل كتبك الرائعة
هل تبقى تعمل الطريقة حتى لو اعدنا تشغيل المودم ؟ الان عند اعادة تشغيل المودم يتغير ال ip !
اربطها ب no-ip فقط 🙂