12 تغريدة 12 قراءة Jan 20, 2022
لماذا نستخدم الـ jmp esp في استغلال البفر ؟
الاجابه القصيره؛ لان الشل كود بيكون داخل رجيستر الـ esp فاذا حطينا عنوان الادرس تبع jmp esp بيشتغل الشل كود حقنا الي داخل الريجستر ..
🔞 تحذير للقلوب الضعيفه؛ يحتوي هذا الثريد على تعليمات اسمبلي
(assembly instructions)
طيب ليه ينحفظ الشل كود داخل ريجيستر الـ esp مو اي ريجيستر ثاني؟
هو للامانه ما ينحفظ الشل كود داخل ريجيستر الـ esp ينحفظ في القيمة السابقة للـesp قبل الـcall function عشان بعد ختمة الفنقشن او ما يُسمى
الـfunction epilogue يصير الـesp يأشر الى بداية الشل الكود
كيف؟ كونوا معنا 🔥
مبدئياً كل فنقشن بالاسمبلي له بداية تهيئ الستاك والريجيسترات وله خاتمه تعيد الامور لمجرياتها الى ما قبل
الـ funcation call، وعشان ما ينفر مخك زياده ما راح نتكلم عن البدايه لاننا ما نحتاجها في فهم هذي النقطه ولكن علينا ان نفهم ختمة الفنقشنز
طبعاً الهدف من الخاتمه او بالانجليزي الـ function epilogue
هي استعادة الامور على ماهي عليها قبل نداء او عمل call للفنقشن
وطبعاً الختمه عباره عن ثلاث instructions يتم تنفيذها وهي الموجوده بالصوره ادناه بناخذها بالتفاصيل شوي
* ملاحظه في غاية الاهميه؛ ما يبدأ تشغيل استغلال ثغرة البفر اوفر فلو الا بعد تنفيذ
الـ ret instruction * ( بنشوف كيف بعد شوي )
* ملاحظه ثانيه؛ الستاك داتا ستركتشر تعمل على نظام اخر شي يدخل هو اول شي يطلع LIFO
Last In First Out
ملاحظة اخيره؛ كل ما يصير pop بالستاك يزيد اربع بايتات، او بمعنى اخر يصعد اربع بايتات فوق باتجاه الـ high address
بالصوره تحت شكل الستاك قبل لا يبدا يختم الفنقشن
اول امر من الختمه هو الـ
mov esp, ebp
وهو يخلي الـ esp ينتقل الى خانة الـ ebp ويصيرون كلهم ياشرون على خانة الـ ebp مثل ماهو موضح فالصوره
بعدين ننفذ امر
pop ebp
والي بدوره يطلع اخر اربع بايتات ويحفظها لل ebp والاربع بايتات هم نفسهم ادرس الـ ebp قبل لا يدخل الفنقشن
ولكن امر بوب بما انه يطلع اربع بايتات فف ال esp بيرتفع اربع بايتات
وبعد ما يصير اخر امر ret
والي هو يخلي الـ return address بمكان ال eip يرتفع ال esp اربع بايتات بقدر حجم ال return address لاننا اخذنا الادرس من الستاك وحطيناه بالـ eip register
مما يجعل ان ال esp ياشر فوق ال return address باربع بايتات وهذا هو مكان الشل كود
فالفكره هي ان اذا استغلينا البفر بب jmp esp
بيكون خيال او صورة الاستغلال بمخك مثل الصوره الي تحت؛
Junk -1 لين يمتلي الستاك ونوصل لل return address
2- بعدين JMP esp address بمكان الـ return adddress
3- وبعدها الـ NOP+ shellcode
فف بعد ال function epilogue او ختمة الفنقشن بياشر الـ esp بالضبط بمكان الشل كود والنوبات اللي المفروض تكون باللون الاحمر بالصوره الموجوده بالتغريده فوق ..
وشكراً 🙏
المصادر ؛
- @blackfishx86
- بهاراتي الخاصه 👨🏻‍🍳

جاري تحميل الاقتراحات...