السلام عليكم ورحمة الله وبركاته اليوم راح أتكلم عن هجوم Ret2Syscall x86/x64
حسابي في التويتر هنا
ماهو SysCall ؟
يكون وسيط بين User و Kernel عندما يريد User من Kernel تنفيذ شيء يستعمل Syscall كي يطلب منها -> هنا جدول Syscalls
ماهو Ret2Syscall ؟
هو أستخدام Syscall كي نستدعي أي Funcations نريدها مثال أن نستدعي execve
ماهي execve
هي function في لغة c تستخدم لأجل أغلاق البرنامج و تشغيل برنامج آخر لمزيد من المعلومات تجدها هنا
مثال على أستخدام execve
متطلبات الهجوم في معمارية x86
وقت التطبيق
البرنامج المستخدم في الشرح تجدونه هنا
في البداية بعد ماتحكمنا في EIP حان وقت بناء الاستغلال
اولاً نجد ألادرس الخاص بتعليمة “pop eax“
ألان نحاول الحصول على ألادرس الخاص بتعليمة “pop ecx“
وألان نجد الأدرس الخاص با “pop ebx“
الان نجد ألادرس الخاص بتعليمة “pop edx“
وألان أخر تعليمة نحتاجها هي “int 0x80” هي التي ستطلب من النواة تنفيذ “execve“
فقط بقي عندنا شيء صغير وهو ان نجد “bin/sh/” في البرنامج كي “execve“ تشغل لنا “bin/sh/”
وقت الاستغلال
هذا الكود الذي كتبته
متطلبات الهجوم في معمارية x64
في معمارية x64 نجد في جدول syscall ان execve قيمتها 0x3b
أول خطوة أن نضع “bin/sh/“ في rdi
ثاني خطوة أن نضع 0x3b في rax
ثالث خطوة ان نضع قيمة 0 في rdx
رابع خطة ان نضع قيمة 0 في rbx # ماهو مهم تقدر تستغل البرنامج بن ماتحط قيمة 0 في rbx
خامس خطولة نضع قيمة 0 في rsi
آخر خطوة أن نستدعي syscall
تحصلون على ألادرس الخاص بأي تعليمة عن طريق أداة ROPGadet
في نظام x64 الArgements توضع في Registers بدال Stack من 1 الى 6 توضع في Registers زي كذا
RDI, RSI, RDX, RCX, R8, R9
وقت ألاستغلال
بنيت أستغلال صغير
الختام
يمكننا أن نبني أستغلال من أي function نريد موجودة في syscall table لكن في مقالتي لقد أخترت ان أطبق على execve function
و في الختام إن أصبت فا من الله وإن اخطأت فمن نفسي والشيطان
References:
https://man7.org/linux/man-pages/man2/execve.2.html
https://x64.syscall.sh/
https://en.wikipedia.org/wiki/System_call