السلام عليكم ورحمة الله وبركاته اليوم راح أتكلم عن هجوم Ret2Syscall x86/x64

حسابي في التويتر هنا


ماهو SysCall ؟

يكون وسيط بين User و Kernel عندما يريد User من Kernel تنفيذ شيء يستعمل Syscall كي يطلب منها -> هنا جدول Syscalls


ماهو Ret2Syscall ؟

هو أستخدام Syscall كي نستدعي أي Funcations نريدها مثال أن نستدعي execve


ماهي execve

هي function في لغة c تستخدم لأجل أغلاق البرنامج و تشغيل برنامج آخر لمزيد من المعلومات تجدها هنا

مثال على أستخدام execve

#include unistd.h int main() { char binary[] = "/bin/sh"; execve(binary,NULL,NULL); return 0; } //Note 0 == NULL //To Compile it use gcc //gcc execve.c -o execve

متطلبات الهجوم في معمارية x86

To use any funcation from syscalls table =========================================== EAX, arg0 (sys-call number loaded here) EBX, arg1 ECX, arg2 EDX, arg3 ESI, arg4 EDI, arg5 EBP, arg6 ===========================================

أن نضع 0xb في EAX لان الرقم حق execve

نستخدم pop eax ; ret

نستخرج الادرس حق (pop eax ; ret) عن طريق أداة ROPgadget

الامر (ROPgadget --binary ret2syscall-x86 | grep eax)

//التعليمات التي نحتاجها pop eax ; ret pop ecx ; ret pop ebx ; ret pop edx ; ret int 0x80 //is execute this code 'execve("/bin/sh",NULL,NULL)'

Join