-
-
[原创]新手玩转Linux Kernel漏洞之Null Pointer Dereference
-
发表于: 2018-5-26 20:09 5149
-
这是我内核漏洞的入门篇, 不是很复杂, 希望能给徘徊在门外的小伙伴一点启发.
A NULL pointer dereference occurs when the application dereferences a pointer that it expects to be valid, but is NULL, typically causing a crash or exit.
小结: 这是一个Linux Kernel Module
类型代码,载入内核执行初始化null_dereference_init
. 在proc
中创建一个Entry
为bug1
.当write bug1
时, 会触发Kernel
调用bug1_write
函数,而bug1_write
中的my_funptr()
是一个空指针.建议大家去学习一下这段代码中不懂的点, 理解上面这段代码很是重要
需要注意的几点: KERNELDR
填写为自己机器的源码根目录, 我自己在Ubuntu 12.04 i386
上面没有编译成功, 在Ubuntu 16.04 64bit
上面编译成功了.
将null_dereference.ko
放入到busybox-1.19.4/_install/usr
中.
静态编译,放入busybox-1.19.4/_install/usr
中,gcc -static Poc.c -o Poc
.
重新打包rootfs.img
, 启动Qemu
, CTRL + ALT + 2
, 输入gdbserver tcp::1234
,CTRL + ALT + 1
切回命令行,
结果:
结论:证明执行了我们的shellcode
.
从普通用户提权到root
用户.
进程的特权等级是通过struct cred
结构体来标识的.当一个进程的uid,gid
为0
, 就表明这是一个root
进程,提权成功.
1.思路: 执行commit_creds(prepare_kernel_cred(0))
2.获取函数地址
3.编写shellcode
保存为payload.s
4.编写exp.c
编译: gcc -static exp.c -o exp
, 拷贝入'/usr'目录, 重新打包.
4.提权
由于内核已经使用mmap_min_addr
作为缓解措施, 我们需要让你重新为0
.
结果图:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
- [原创]C++ static关键字引发的思考 10848
- [原创]Windows 之 CRT的检测内存泄露 16560
- [讨论] <<程序员的自我修养 -- 链接、装载与库>> 书籍相关问题 32312
- [原创] Kamnira Adware分析 4464