首页
社区
课程
招聘
[原创]新手玩转Linux Kernel漏洞之Null Pointer Dereference
发表于: 2018-5-26 20:09 5112

[原创]新手玩转Linux Kernel漏洞之Null Pointer Dereference

2018-5-26 20:09
5112

这是我内核漏洞的入门篇, 不是很复杂, 希望能给徘徊在门外的小伙伴一点启发.

    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中创建一个Entrybug1.当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,
result02
CTRL + ALT + 1切回命令行,

结果:

result03

结论:证明执行了我们的shellcode.

从普通用户提权到root用户.

    进程的特权等级是通过struct cred结构体来标识的.当一个进程的uid,gid0, 就表明这是一个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.

结果图:

result04

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//