السلام عليكم ورحمة الله وبركاته اليوم راح نتكلم عن كيف نستعمل Function Mprotect عشان نتخطى حماية NX
حسابي في التويتر هنا
أيش هي Mprotect ؟
هي funcation في c وظيفتها تغير الصلاحيات في أي مكان في memory
هنا زي مانشوف نحتاج 3 arguments عشان نستعملها
1- هي بداية العنوان حق المكان الي نبي نغير صلاحياته
2- حجم المكان الي نبي نغير صلاحياته
3- الصلاحيات الي نبي نغيرها
PROT_READ — 0x1
PROT_WRITE — 0x2
PROT_EXEC — 0x4
PROT_NONE — 0x0
to make region RWX 0x1 + 0x2 + 0x4 = 0x7
كيف نستعمل mprotect ؟
نبي نغير الصلاحيات حق العنوان 0x0000 من RW الى RWX ونغير الصلاحيات لين 0x1000
راح نستعملها زي كذا
mprotect(0x0000,0x1000,0x7)
فا راح نحط arguments في الاماكن ذي ثم نستدعيها
first argument = RDI
Second argument = RSI
Third Argument = RDX
ثم نستدعيها
بكذا صار من 0x0000 الى 0x1000 صلاحياته RWX وتعني
Read | write | execute
البداية
الفكرة ألاساسية ان نستعمل الفنكشن كي نغير الصلاحيات الي على Stack من RW الى RWX لوضع الShellcode الخاص بك وتشغيله بدون أيت مشاكل
هنا الرنامج الي راح نطبق عليه
أول شي نشوف انه برنامج بسيط يطلب أسمك فقط ومصاب با ثغرة stack overflow
ثانياً نرا ان حماية NX مفعلة وهذا يعني لايمكن وضع shellcode وتنفيذه مباشرة
نشوف الfuncations الي في البرنامج ونلاحظ ان mprotect موجودة
نشوف قدرنا نسوي Overwrite للRIP وقدرنا نتحكم فيه
وطلعنا الOffset وانه بعد 88 اب شيء نكتبه ينكتب في RIP
هنا لقينا الGadgets ألي نحتاجها عشان نحط 3 arguments في أماكنها ونستدعي mprotect
هنا نشوف العنوان الي يبدا منه stack و الصلاحيات الي عندنا هي read/write لكن مايمدينا نسوي execute ونشوف ان حجمه 0x21000
هنا كتبت سكربت بسيط أتاكد ان mprotect راح تشتغل بشكل الصحيح قبل مأحط shellcode نشغل السكربت ونسوي attach لل process من gdb