السلام عليكم
جمعة مباركة،
في محاولتنا لتنفيذ البرنامج التالي
#include<stdio.h>
int main()
{char x[50];
printf("Enter any thing \n");
scanf("%s",x);
return 0;
}
سنجد لتطبيق الثغرة تواجهنا مشكلة ادخال 0x00 طيب في هذه الحالة لا يجب انيأس او نقول ان الثغرة صعبة الاستغلال او غير ممكنة ، ولكن ستقيدنا نوعا ما لذلك انه لا نستطيع ان نضيف اي حرف بعد عنوان الرجوع الذي سندخله في اخر كود الاستغلال اي ان شكل الاستغلال كالآتي
nops......shellcode... return addrs
سندخل بيانات (حرف a ) كمثال حتى يحدث الخطأ ولكن لاحظ اضافة بدقة ويجب ان نراقب رقم EIP حتى يصبح 0x41414141 دون زيادة او نقصان لنقل انه يحدث ذلك بعد اضافة 75 حرف (هذا رقم تخميني للشرح) ننقص حرف واحد فقط يصبح لحدينا حجم الاستغلال 74 لماذا نقصنا حرف لسبب بسيط ان عنوان الرجوع اصلا يحتوي على 0x00 في آخره لماذا نتعب مرة اخرى لكي نكتب شيء موجود؟ ما علينا الأن لدي ثلاثة بايتات من العنوان لاكتبها ، نأتي الان لاستخدام برنامج آخر وهو ollydbg سننفذ البرنامج خطوة خطوة ونراقب الstack وجدنا ان اول ادخال لحروف a يبدأ مثلا من العنوان 0x0022FC60
اذن سيكون عنوان الرجوع كالأتي 0x60 0xFC 0x22 بالترتيب من اليسار إلى اليمين ، نفتح محرر الهكس نضيف عدد 74-3 =71 حرف 0x90 او nops ثم نضيف العنوان الذي سبق ذكره ونحفظ الملف ،
نفتح الملف الأن ثم نشغل البرنامج ctrl+c من الملف إلى البرنامج ctrl+v ثم ENTER لا تنسى تشغيل البرنامج باستخدام المنقح ollydbg ستجد ان التنفيذ اصبح داخل stack وان الاكواد جميعها nops ، الخطوة الاخيرة هي البحث عن شيل كود ذو حجم مناسب واضافته للملف ليحل محل الNops ،
اتمنى ان تبدوا ملاحظاتكم واستفساراتكم على الموضوع
;dtdm jo'd la;gm 0x00 td eyvm stack hgfsd'm