حل مشكلة توليد msfpayload لـ Null Byte

بالأمس كنت بحاجة الى الحصول على كود لـ bind_tcp من خلال metasploit وحصلت عليه وكل شيء تمام … بعد إستعماله في الثغرة التي أود إستغلالها لم أتمكن من الحصول على الـ shell وقمت بفحص أمور الجدار الناري وما الى ذلك خوفاً أن يكون هو السبب وأنه يقوم بحجب الإتصال ولكن لم يكن هو السبب … ولهذا قمت بجلب نسخة من الخادم الذي أود إختراقه للتجربة، وقمت بتشغيله من خلال OllyDbg ومتابعة الأوامر التي ينفهذا المعالج خطوة خطوة … وضعت Break Point على الـ JMP ESP الموجود في المكتبة SHELL32.dll وذلك لانها على ما يبدو غير موجودة في Windows XP SP3 في مكتبة USER32.dll كالسابق والذي أغلب الناس كانت تستعمله من هناك … المهم قمت بما ذكرت ونفذت الإستغلال ووصلت الى الـ Break Point … لكن حين أكملت التنفيذ (خطوة خطوة) البرنامج كان ينفذ أوامر غريبة أخرى ليس لها علاقة بالأوامر التي أريدها أنا (الشل كود) !! بعد التدقيق تبيين بإنه الـ msfpayload عندي كان قد ولد Shell Code لي فيه Null Byte أو بنظام الهيكسا x00 !!! ولهذا كان الـ Buffer عندي يقطع في منتصف الطريق بسبب هذا الخلل !

الحل ليس صعب ولكنه أخذ مني بعض الوقت للأمانة وكان على النحو التالي (أفترض إنك بداخل مجلد الميتاسبلويت):

./msfpayload windows/shell_bind_tcp R > /root/rawfile

هكذا عملنا الـ Shell Code ولكن الناتج على شكل RAW وليس على شكل كود C كما هو معتاد … وبعد ذلك قمت بعمل أنكود له:

./msfencode -i /root/rawfile -t c -b '\x00'


لاحظ آخر خيار أضفته الى الأمر … الخيار b استعملته لكي أخبر Metasploit أن تعامل الذي بين ‘ و ‘ على أنها تحاول أن تتجاوزهما ولا تظهرهما في الكود وهذا بالفعل ما حصل … بعد ذلك أخذت الكود ووضعته في الثغرة وتم تنفيذ الثغرة مع مراقبة ما يحدث في الـ Debugger وكله طلع تمام التمام …

أحببت ذكر هذه المسألة وكيف تجاوزتها لأنه الكثير من الناس يظن بإن الـ Metasploit لا يولد في الـ Shell Code أي Null Byte وهذه فكرة خاطئة لانها بالفعل حصلت …

ملاحظة:
إن كنت بحاجة عزيزي القاريء الى معرفة عنوان وجود الـ JMP ESP في مكتبة SHELL32.dll على نظام Windows XP SP3، فهو موجود بالعنوان التالي:

"\x65\x82\xA5\x7C"

أو

6582A57C
نبذة عن الكاتب

علي ([email protected]). دكتوراة في أنظمة الحاسوب. يعمل كأستاذ جامعي في قسم علم الحاسوب. مختص في التحقيقات الجنائية الالكترونية والإستجابة للحوادث الالكترونية (DFIR)، أمن الشبكات وتحليلها، وكذلك أمن أنظمة التشغيل المختلفة. حاصل على العديد من الشهادات التقنية، وسابقاً كان يعمل كمختص في جدر النّار، أنظمة كشف الاختراق، ادارة الثغرات والترقيعات، حماية الأنظمة، فحصوصات الاختراق، وتطبيق السياسات. مسؤول سابق عن متابعة وتطبيق (PCI DSS).

التعليقات:

اترك تعليقاً | عدد التعليقات: (3)

  1. يقول Hacker-Unix:

    الله يعطيك الصحة والعافية خيو ابومحمد لكن هل تستخدم لغة السي لكتابة استغلال لثغرة مثلاً في خدمة Ftp لبرنامج معين؟
    وايضاً لماذا لاتستخدم البايثون فهي اسهل وأقوى لإنشاء Exploits?

  2. يقول [email protected]:

    أهلا أخيHacker-Unix … ممكن نستعمل c ولكن بالغالب أستعمل بايثون … بايثون أسهل بكثير لأنني منذ زمن لم أبرمج على أي لغة برمجة … ولكن مع هذا نستطيع الإعتماد على الأمثلة الموجودة في metasploit للكتابة …

    نورت أخي …

  3. يقول عبد العزيز حسن:

    في الحقيقه انا اعلم موضوع التجاوز القيم من خلال الاوبشن -b منذ فترة فقد قرات عنها في مدونه عبد
    المهيمن ولكني فعليا لم استعملها حتي الان لاني لم اكن اعلم لما قد احتاج الي استبعاد بعض القيم
    مشكور كثير يا ابو محمد علي الموضوع الرائع

أكتب تعليق على Hacker-Unix