9 تغريدة 51 قراءة Mar 17, 2021
اليوم شرحنا لحل تحدي level-0 من مسابقة @CyberhubSa الي هي bufferoverflow linux x86
بالبداية الباينري فيه حركة خبيثه راقت لمخي صراحه الا وهي لمن تبي تجي تملي الستاك A's، الباينري يغير ال A الى شي عشوائي، فلذلك اضطريت اسوي RE خفيف للباينري باستخدام ghidra
نشوف ان الباينري بب
function overflow يمشي على كل الحروف الي ندخلهن واذا شاف A يخليه يسويله حركات بركات ويغيره، واذا شاف T, j يخليه 1-
باختصار هذي هي الـ badchars الي لازم نتجنبها واللي هي؛
0x00, 0x41,(j) 0x6a,(T) 0x54
بعد ما سوينا fuzzing طلعنا انه نحتاج 524 bytes بعدها نقدر نتحكم بالـ eip
بس لحظة حنا ما نقدر نسوي بيلود ريفيرس شل بالـ msfvenom ونحطه لانه مو كلنا نفس حالة @TheMinz1991 عندنا vps نستقبل منه الريفيرس شل ..
فف الخطه الي سويتها هي اني ادور على شل كود مافيه الـ badchars
حلو الحين بكل سلاسه ، نملي البفر خرابيط بعدها نحط return address لل jmp esp وبعدها نحط الشل كود
الـ return addres لل jmp esp سهل تجيبه نفس ماهو موضح بالصوره
وبالاخير نطلع بالسكربت الموضح ادناه استخدمنا فيه pwn tools عشان حركات الريموت وال interactive
فالنهاية؛ هذا الفلاق النهائي
وهذا كود @_Sp3eD الي يخليك تضحك على نفسك
Bouns:
بعد استشارة استاذي @blackfishx86
عرفت طريقة افضل من ال fuzzing العمياني وهي من خلال كود الاسمبلي قبل الـ call لل read function البرنامج يعطي ستاك للـ input، حجمها موضح بالـ hex بالتعليمة
lea eax,[ebp+0xfffffdf8]
وقيمة 0xfffffdf8 تساوي 520 بالـ decimal
ينضاف اليها 4 عشان نحسب حساب
الـframe address
وبكذا طلعنا حجم الستاك 524
واذا ما فهمت شي عادي حتى انا مو فاهم قزرها fuzzing لين يفرجها ربك 🥲

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