您好、欢迎来到现金彩票网!
当前位置:2019手机棋牌游戏平台 > 系统调用 >

Linux内核Waitid系统调用本地提权漏洞(CVE-2017-5123)的分析与

发布时间:2019-06-04 05:07 来源:未知 编辑:admin

  最近在整理Linux内核漏洞利用的一些场景,比如利用系统调用漏洞、利用一些比较容易fuzz的漏洞,通过对这类场景的总结可以帮助我们快速发现0day,积累漏洞挖掘的经验。虽然这一类型的漏洞出现的频率很低但是优点也很显著,这类漏洞利用比较简单、直接。我通过查看github上Linux源代码patch日志发现CVE-2017-5123就是我要收集的目标,这类漏洞的攻击面是内核处理用户态指针出错,一般是内核没有检查用户态指针就直接使用,或者是对用户态指针检查不正确(本来是用来read的指针,却用来write)等, 一般会在access_ok、copy_from_user、copy_to_user 等几个函数使用中出现漏洞。

  漏洞出现在waitid系统调用中,因为没有检查用户态传入的指针的有效性导致用户态可以任意内核地址写漏洞。

  patch中添加了检查参数infop用户态指针是否可以写入的检测。如果infop指向无效地址, 或者内核地址空间都是非法的。

  这份exploit 比较简单,学习的重点放在如何修改的内核内存达到劫持控制流。

  接下来申请一片内存用来存储shellcode。这里从0地址开始映射了4096 byte内存。

  这里先是向0xffffffff81f3f45a 地址写入0, 然后跳转到get_root 函数处去刷新当前进程的 凭据, 刷新凭据的代码使用通用的提权代码,如下:

  上述权限提升有效载荷会分配一个新的凭证结构(uid=0, gid=0等)并将它应用到调用进程中, 当前这个exploit就是使用的这个payload达到提权的目的。因为关闭SMEP所以免去了用rop翻转smep绕过SMEP的限制。

  最后该触发漏洞漏洞了,这里先调用waitid(1, pid,0xffffffff81f3f45a,…)修改内核地址0xffffffff81f3f45a的内容,然后调用fork函数。一般的套路是修改内核data段内一个全局结构体中的函数指针地址,然后在调用此函数指针跳转到我们的目标地址。

  内核中有很多这样的结构,比如avc_callbacks、cgroup_subsys、have_fork_callback 等等。这里作者只给了一个地址没有说明是那个函数,需要动态调试内核到这个地址查看内容才能知道使用的是哪个函数指针。

  目前受到网络影响没办法调试漏洞,暂且分析作者的调试日志,可以发现漏洞触发过程的调用栈。

  根据调用栈 我们就知道是修改了fork函数实现中的某个函数指针,下面继续分析源代码。

  漏洞分析和exploit的原理分析完毕,我在本地做了测试非常稳定的exploit,感兴趣可以看看文章开头的提权视频。

  1、run_kernel.sh在qemu中启动vul linux(开启靶场),从qemu 启动日志和脚本可以看到系统防护的状态(NX开启了,kaslr关闭了)

  3、./exploit 0xffffffff81f3f45a在2中输出了这条命令,exploit是二进制程序没有源代码,可以逆向或者自己分析漏洞写exp。此exp已经具有任意内核地址写的能力。

http://showmycoco.com/xitongdiaoyong/96.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有