首页
社区
课程
招聘
[原创]CVE-2017-5123 waitid本地提权分析
发表于: 2018-9-26 15:34 9932

[原创]CVE-2017-5123 waitid本地提权分析

2018-9-26 15:34
9932

最近研究linux kernel pwn的时候发现网上有的文章对cve-2017-5123的分析存在错误,就想着自己复现一下写篇博客,最简单的利用exp无 smep

内核定义了一系列函数与用户态内存进行交互,包括copy_from_user ,copy_to_user,put_user等,这些函数中会调用access_ok检查传入的地址是否属于用户区,之后调用user_access_begin() user_access_end分别开启和禁用smap。为了减少检查开销,linux内核定义了unsafe_put_user函数,但waitid在调用前没有进行access_ok检查,因此可以传入内核地址,任意内核写,但是利用条件会将第一个int写为0x11,第二个int写为0.因此采取的方法是改写have_canfork_callback变量。将其第一个字节改为0x11进而执行未定义的can_fork,并mmap 0地址,写入shellcode。完成提权。 此次利用必须在关闭了mmap_min_addr 和 smep保护的前提下。 参照github上的利用代码进行分析 7cfK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6F1L8$3&6Y4K9h3q4U0K9q4)9J5c8V1y4h3c8g2)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3V1k6o6g2V1g2Q4x3X3b7J5x3o6p5%4i4K6u0V1y4e0p5J5x3#2)9J5c8X3g2^5M7r3I4G2K9i4c8Q4x3V1k6W2P5s2m8D9L8$3W2@1i4K6g2X3L8Y4g2D9L8q4)9#2k6Y4m8@1M7W2)9#2k6X3c8W2M7X3g2X3i4K6u0W2j5H3`.`.

fork系统调用最终会调用do_fork,在do_fork中,会调用copy_process函数为子进程复制一份进程信息。
copy_process源码中调用了cgroup_can_fork函数。




cgroup_can_fork函数中调用了do_each_subsys_mask()

do_each_subsys_mask会调用for_each_set_bit函数


for_each_set_bit会调用find_first_bit和find_next_bit,会搜索传入的have_canfork_callback变量,最终返回值ssid是位图中小于cgrou_subsys_count的最后一位1的索引值。


cgroup_subsys是一个全局的cgroup_subsys struct的数组,其中保存了一系列函数指针。cgroup需要用户自定义,未定以,其can_fork函数指针为null。cgroup_can_fork也不会调用cgroup_subsys的can_fork,而是直接返回0。但是waitid将第一个字节改写为0x11 即010001。默认的CGROUP_SUBSYS_COUNT值为4,因此会调用第一个cgroup_subsys的canfork,即0地址。此时,利用代码mmap了0地址,并将shellcode放置在0地址处,fork即可劫持控制流,完成提权。

采用qume起系统,gdb调试

用这个脚本生成kallsyms

在kallsyms中搜索cgroup_can_fork地址,并在gdb中下断点。

随便运行一条命令,bash会调用fork,在我们的断点处停下,查看汇编代码:



0xffffffff81f3f45a处即为全局变量have_canfork_callback变量。之后打印调用了find_first_bit之后的返回值


可以看到,如果返回值大于三即跳转到结束处。可见cgroup_subsys全局数组的数量默认是4个。如果小于3,继续执行



r12的值为0xffffffff81e4bb60,为全局cgroup_subsys数组,



普通的fork默认是没有定义cgroup的can_fork,因此have_canfork_callback的值为0x0000000000,其返回值为4,因为传入的参数为4,大于3,直接跳转至结束处



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-9-26 16:12 被obfuscation编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (5)
雪    币: 1573
活跃值: (343)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
2
748K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6F1L8$3&6Y4K9h3q4U0K9q4)9J5c8V1y4h3c8g2)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1&6i4K6R3%4i4K6S2o6i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1#2i4@1q4q4i4K6S2o6i4@1f1$3i4K6V1#2i4@1t1@1i4@1f1#2i4@1p5@1i4K6S2p5i4@1f1%4i4K6S2q4i4@1t1H3j5%4k6W2i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1$3i4K6W2p5i4K6V1H3i4@1f1$3i4K6V1$3i4K6V1&6
2018-9-26 15:56
0
雪    币: 58782
活跃值: (21915)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
若涉及到相关实例或附件,建议一起上传。
2018-9-26 21:57
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主咋样才可以联系你呀
2018-11-1 10:09
0
雪    币: 1573
活跃值: (343)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
5
汪星i 楼主咋样才可以联系你呀
欢迎交流啊,可以私信给我
2018-11-7 23:51
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主,请问生成kallsyms 的脚本是什么啊
最后于 2019-2-2 15:20 被lbbb编辑 ,原因:
2019-2-2 09:39
0
游客
登录 | 注册 方可回帖
返回