السلام عليكم ورحمة الله وبركاته اليوم راح نتكلم عن كيف نستعمل 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

Join