![]() |
كيفية تخطي مشكلة 0x00 في ثغرة stack البسيطة السلام عليكم جمعة مباركة، في محاولتنا لتنفيذ البرنامج التالي #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 ، اتمنى ان تبدوا ملاحظاتكم واستفساراتكم على الموضوع |
ههه ايوا بتتخطى يا مورفوس لوول |
انا قصدي في الادخال اليدوي معروف ان scanf ("%s"); تأخذ النص حتى تجد رمز النهاية 0x00 فهذه مشكلة اذا اردت ان ادخل عنوان رجوع مباشر؟ |
بارك الله فيك تم اسفادتي هـ‘ع |
الحمد لله ان افدت احدهم |
رد: كيفية تخطي مشكلة 0x00 في ثغرة stack البسيطة |
الساعة الآن 03:12 AM |
[ vBspiders.Com Network ]