مقال : برمجه سكربت HTTP Bind Shell بواسطه لغه البايثون

3 تعليق حماية 28- أغسطس -2016 كاتب المجتمع

مقال : برمجه سكربت HTTP Bind Shell بواسطه لغه البايثون

في البدايه دعنا نشرح ماهو الشيل Shell ؟

يمكننا أن نعبر عنه ببساطه بأنه كود أو برنامج يعطيك صلاحيه تنفيذ أوامر علي الجهاز سواء كان هذا الجهاز سيرفر أو حتي هاتف وغيره..

أنواع الشيل (Types Of Shells):

1.Reverse shell

110414_1037_ICMPReverse1

هو النوع الذي يتصل فيه الجهاز الهدف بجهاز المهاجم علي منفذ محدد ويكون المهاجم بالفعل قد قام بعمل تنصت من قبل علي هذا المنفذ أنتظاراَ لأي أتصال قادم ومن ثم يكون المهاجم قادر علي تنفيذ أوامر علي جهاز الهدف.

2.Bind shell

110414_1037_ICMPReverse2

هو عكس النوع السابق فيقوم فيه الجهاز الهدف بعمل تنصت علي منفذ محدد حتي يقوم المهاجم بالأتصال بهذا المنفذ ومن ثم يستطيع تنفيذ أوامر علي جهاز الهدف.

والأن سنشرح كيف تقوم بكتابه http bind shell

لكن قد يتسأل أحد ماهو الـhttp shell ؟

هو ببساطه يا عزيزي شيل مثل أي شيل ولكن التواصل يكون عن طريق طلبات get/post وهو يكون أصعب أن يتم كشفه وأسهل في التواصل مع الجهاز الهدف.

والأن لنقوم بهذا هناك العديد من الطرق والمكتبات للقيام بhttp shell ولكن في هذه المقاله سنستخدم مكتبه cherrypy لسهوله أستخدامها والتعامل مع الملفات

لتحميل المكتبه عن طريق pip فقط قم بكتابه الأمر :

وسنستخدم مكتبه requests أيضا اذا لم تكن منصبها بالفعل قم بتنصبها عن طريق الأمر :

ومن هنا سنقوم بعمل ثلاثه ملفات:

Controller.1

وهو الذي ستتحكم منه في الأجهزه التي تخترقها

Listener.2

والذي سيكون الوسيط ليستقبل الأتصالات ويحفظ الـips الخاصه بالأجهزه التي عمل بها الـBackdoor.

وقد تتسائل الأن لماذا في ملفين مختلفين وليس واحد ؟

وذلك لأن cherrypy تقوم بعمل الكثير من الكتابه (الـprints) في التيرمنال والتي لا يمكن منعها ولذلك فضلت عزل ملف الـController عن الـListener

backdoor.3

وهو الملف الذي سترسله للجهاز الهدف ويقوم بعمل Bind

والأن نبدأ ببرمجه الـListener

أولا نقوم بأستيراد المكتبات التي سنستخدمها :

وهنا قمنا بأستيراد مكتبه binascii لأننا سنقوم بأستخدام ترميز hex للبيانات التي نرسلها والتي نستقبلها لضمان وصول البيانات كامله وأيضاَ لأضافه بعض من الأمان

والأن يجب أن نقوم بعمل Class لأن مكتبه cherrypy تعمل بالـOOP أو البرمجه الكائنيه واذا كنت لاتعلم ماهي فلا تقلق فليست معقده لهذه الدرجه لتتعلمها 😀

فمثلا لعمل تطبيق بسيط لأبين لكم كم هي بسيطه نقوم بالأتي

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

Capture

والأن نذهب الي الرابط http://127.0.0.1:8080 ستجد الأتي

Capture2

نفس الجمله كما كتبنا في الكود ولعل هذا يعلمك أن index هو أسم الـFunction الأفتراضيه التي تفتحها المكتبه بشكل أفتراضي أذا قمت بفتح الأيبي فقط بالمنفذ من المتصفح ولذلك يجب أن نعطيها أهتمام أكثر من غيرها 😀 وهذا ما سنقوم به بعد قليل

والأن قبل كل Function تقوم بعملها لا تنس أن تضع هذا السطر لتجعله علي الأنترنت

والأن سنقوم بعمل فاكشن ونسميها NewConnection وهي التي ستضيف أيبي كل جهاز يعمل عليه الباكدور الي ملف نصي وسنبين بعد قليل لماذا

قمنا بأنشاء الفانكشن في السطر الثاني وفيه باراميتر ip حيث هذا سيكون أيبي الهدف الذي سيرسله بنفسه ومن ثم نقوم بعمل decoding له لأنه سيكون مرسل علي هيئه hex وبعدها نحاول ان نفتح ملف Connections.txt بالمود a وكتابه الأيبي وغلق الملف والمود a معناه الكتابه في الملف دون مسح مافيه لكي يعمل هذا المود يجب أن يكون الملف موجود بالفعل ولذلك وضعت أستثناء اذا لم يستطع فتح الملف أي أنه لم يكن موجود نقوم بفتحه بالمود w والذي يعني أن لم يكن الملف موجود أنشئه ويعني أيضاَ انه أذا كان موجود يقوم بمسح مافيه !

ولذلك قمت بأستخدام المودين فالسكربت عندما يفتح لأول مره لن يجد الملف ولذلك سيقوم بعمل الملف النصي الذي سيكتب به الايبهات الخاصه بالأهداف التي أخترقناها كما ذكرنا من قبل فلقد قمت بهذا لأننا سنجعل فانكشن index تقوم بقرائه الملف وطباعته في صفحه الويب 😀 فهذا الملف سيكون طريقه التواصل مابين فانكشن NewConnection و index .

أذاَ الأن عندما يأتينا أتصال ثاني بعد الأتصال الأول الذي سينشأ الملف النصي لن نقوم بمسح الملف وفقد الأيبي الأول بل سيقوم بكتابه الايبي أسفل الأيبي القديم 😀

لاحظ أنني قمت بأستخدام ليست Added لأعرف أذا كان هذا الأيبي أتصل من قبل أم لا حتي لا أضيف نفس الأيبي أكثر من مره أذا أتصل أكثر من مره !

والأن نعود الي فانكشن index لاضافه بعض اللمسات 😀

الأن عندما تفتح الأيبي الرابط مجددا ستعمل فانكشن index تلقائياَ والتي ستقوم بعمله هو الأتي بترتيب السطور :

أذا لاحظت هناك الأمر try وهو موجود من أجل مود القراءه r فلو لم يستطع أذا نذهب الي الأستثناء وهو طبعا أنه لا يوجد أي أتصالات حتي الأن ولكن اذا أستطاع قراءه الملف النصي أذاَ فأنه هناك أتصالات أذا نقوم بعمل فرز للملف وطباعه كل سطر بجانبه رقمه فكل سطر هو أيبي

والأن لنجعل كل هذا يعمل نضيف الأمر النهائي بخارج الـClass لتقوم مكتبه cherrypy بعملها ولكن هل لاحظت أن الأيبي الذي تقوم المكتبه بالتنصت عليه هو أيبي اللوكال هوست أي 127.0.0.1 وبالتالي لن تستطيع أستقبال أتصالات نهائيا أذاَ اذا قمنا بالتنصت علي الأيبي الداخلي سنستطيع أستقبال الأتصالات من داخل الشبكه فقط وبالتالي سنقوم بالتنصت علي 0.0.0.0 لنستطيع أستقبال الأتصالات من داخل الشبكه ومن خارجها فيكون الكود الذي سنضيفه خارج الـclass هو

والأن نجرب الكود ونفتح الرابط من المتصفح مع ملاحظه أننا نستطيع تغيير المنفذ مثلما قمت في السطر الثالث ونستطيع في المتصفح الي الدخول علي اللوكال هوست بالمنفذ المحدد مثلا كان من قبل أو بوضع الأيبي الداخلي بالمنفذ أيضا كالأتي

AfterEdit

 

والأن كما تري دخلت علي الرابط http://192.168.1.100:8080 وهو الأيبي الداخلي الخاص بي ومن خلال المنفذ الذي حددته أنا في السكربت وكما تري الأن طبع جمله No Connections Yet !! كما في الكود وذلك بسبب أنه لا توجد أتصالات حتي الأن بالفعل 😀

والأن نبدأ ببرمجه الـBackdoor

نقوم بعمل أستيراد للمكتبات التي سنستخدمها في برمجه الـBackdoor

نقوم بتحديد الأيبي الخاص بك (المهاجم) لأنه سيرسل لك رساله يعلمك بالأيبي الخاص به في فانكشن NewConnection التي قمنا بعملها من قبل في سكربت Listener وتحديد البورت الذي سنتواصل عليه وهو نفس الذي أخترته في سكربت Listener

والأن نقوم بعمل الفانكشن الخاصه بأرسال أيبي الجهاز المخترق لنا كأنه رساله لنتصل به ولاحظ أنه سيكون محول الي ترميز Hex

لاحظ أنني قمت هنا بأرسال طلب Get الي هذا الرابط http://api.ipify.org/?format=text وهذا الرابط اذا لاحظت أنه بمجرد الدخول عليه تجد الايبي الخارجي الخاص بك فقط ولذلك أنا استخدمته لجلب الأيبي الخارجي للجهاز بسهوله ولكن لاحظ أنني أضفت بعض التعليقات بعدها لو أردت أن يرسل الأيبي الداخلي بدل الخارجي وهذا يكون في حاله أن يكون الهدف في داخل الشبكه وبعد هذا كله يرسل الايبي عبر طلب بوست لفانكشن NewConnection التي قمنا بعملها من قبل في سكربت الـListener وكل هذا يحاول أن يقوم به أي أن كنت لم تشغل سكربت Listener بعد فأنه سينتظر ثانيه ومن ثم يحاول الأتصال من جديد حتي تقوم بتشغيل السكربت وقت ما تريد 😀

والأن نقوم بعمل Main Class والتي ستقوم بتشغيلها مكتبه Cherrypy

أولا نقوم بعمل فانكشن index كالأتي فأذا دخل الضحيه علي اللوكال هوست من هذا المنفذ بالخطأ أو بالقصد يعطيه رساله خطأ وهميه

والأن لو الضحيه قام بفتح http://127.0.0.1:8080 فسوف يري الأتي

Capture

والأن الفانكشن الأهم وهي كونترول والتي هي المسئوله عن تنفيذ الأوامر فنقوم بأعطائها باراميتر للأمر وتعود بالناتج فتطبعه علي الصفحه وسوف نبين بعد قليل كيف نجلب محتويات الصفحه ولكن لا تنس أن تقوم بفك ترميز الأمر وترميز الناتج قبل أرساله

لاحظ أني هنا قمت بأستخدام popen وليس تنفيذ أمر عادي لأنك لو قمت بأستخدام أمر system مثلا في مكتبه OS أو أمر call في subprocess فسوف يطبع ناتج الأمر في التيرمنال ولكن لن نختلف فسوف نتكلم في نهايه المقاله عن كيف تخفي شاشه الباكدور

والأن نضيف السطور الأخيره خارج الـClass ليعمل الباك دور

والأن أنهينا الـBackdoor نبدأ ببرمجه السكربت الأخير وهو لا يقل أهميه عنه وهو الـController

أولاَ نقوم بعمل أستيراد للمكتبات وتحديد البورت الذي سنقوم بالتنصت عليه وعمل قائمه والتي سنضع بها الاتصالات

والأن نقوم بعمل حلقه أو Loop لتحاول كل خمس ثواني أن تقرأ الملف النصي والذي بالطبع لن يتكون الملف الأ لو كان هناك أتصالات وعندما تجد الملف تقوم بعمل فرز له وأضافه كل الـips الي قائمه Connections 

والأن نقوم بعمل الـLoop الخاصه بالتحكم وأضافه أول أمر وهو help لعرض جميع الأوامر

الأن نقوم بعمل الأمر list لعرض الأتصالات الموجوده الأن في قائمه Connections وبجانب كل ip الرقم الخاص به والذي سيكون كا الـid للأتصال به بعد قليل

وقبل أن نبدأ بالأمر الأهم connect نقوم بعمل الأمر exit للخروج من السكربت قبل أن أنسي

والأن الأمر الأهم connect والذي سيكون مسئول عن أختيار جهاز من ناتج الأمر list والأتصال به ومن ثم نبدأ بأرسال الأوامر عبر طلبات post وأستقبال الناتج بقرائه المحتوي الذي يطبع في الصفحه ولا تنس أن ترسل البيانات بترميز hex 🙂

الأن كما تري في السطر العاشر نرسل طلب post الي الجهاز عن طريق مكتبه requests وبعدها جلب محتوي الصفحه وفك ترميزه في السطر الذي يليه

والأن نقوم بتجربه السكربت

وهذا قبل تشغيل الـBackdoor

1

والأن بعد تشغيل الـBackdoor علي الجهاز الهدف (جهاز بنظام ويندوز علي نفس الشبكه)

2

الأن نجرب بعض الأوامر

3

ولو قمنا الأن بفحص الـBackdoor علي موقع من مواقع الفحص ستجد أنه ملف عادي في نظر كل الحمايات 😀

Scan_Result

الأن تتبقي مشكله وحيده وهي أخفاء الـBackdoor وجعله لا يظهر عند تشغيله علي الجهاز الهدف ولفعل هذا هناك عده خدع

1.جعل السكربت بصيغه pyw بدل py وهذا لن يجعله يظهر عند تشغيله ولكنها تعمل علي نظام ويندوز فقط

2.أستخدام مكتبه pywin32 بأضافه هذا الكود:

3.أستخدام الخيار noconsole عند أستخدام أداه pyinstaller كالأتي:

الأن أترك الكود الكامل بين يديكم وأنصرف 😀

الكود : https://github.com/D4Vinci/ReverseHttp

squnity

مجتمع عربي للحماية و امن المعلومات

إضافة تعليق

  • aymen

    درس رائع جدا
    ارجو الاستمرار في طرح مثل هذه المواضيع