首页
社区
课程
招聘
[原创]CVE-2014-0038分析
发表于: 2018-9-1 23:34 18223

[原创]CVE-2014-0038分析

2018-9-1 23:34
18223

    这是决定不打比赛之后的第一个CVE分析, 感觉还行, 就是其中个别问题没有弄清楚, 基本流程清楚了, 最后我会提出我的问题, 有哪位大佬能回答的, 直接在下面留言就行了.

原因

    没有对用户空间的输入信息进行拷贝处理, 直接将用户空间输入的timeout指针传递给__sys_recvmmsg函数进行处理.

漏洞代码

    提权的思路: 首先我们先将commit_creds(prepare_kernel_cred (0));代码复制到一段可以执行的用户空间代码. 利用内核的漏洞, 修改某一个内核指针为用户空间指针(这个指针指向的内容含有commit_creds(prepare_kernel_cred (0));). 执行这个内核指针, 我们获取一个root cred.最后执行system("/bin/sh"), 获取一个root shell.

1. 结构体

    说明: 修改的内容是net_ctl_permissions, 修改的指针net_sysctl_root + 96, 这个指针指向net_ctl_permissions.

2. 提权代码复制

   总结: 基本上copy提权代码这一块, 大多数exp写的大同小异, 几乎形成了一个模板.
3.开启父进程的UDP服务

    总结: 开启父进程的UDP服务,设定接收的信息的结构体msgs.个人觉得这段没什么软用, 起辅助作用.
4.重头戏

   总结: 通过设置父进程开启UDP服务, 子进程故意睡眠0xff秒, 然后向父进程发送一个UDP报文,从而触发漏洞. 将net_sysctl_root+96处的后三个位清零, 清零后net_sysctl_root+96就成了用户地址, 而这个地址我们已经copy有提权代码.

三个字节覆盖过程截图:(从后往前覆盖的)
第三个字节

第二个字节

第一个字节

    当时, 不明白为什么只有一个父进程和一个子进程存在, 现在明白了, 答案就在下面链接里.
一个问题
5.触发漏洞

   结论: net_ctl_permissions是一个权限检查函数. 当open /proc/sys/net/core/somaxconn, 这个设备时, 需要先使用net_ctl_permissions进行权限检查, 其实这时的函数地址已经被修改为提权shellcode. 先获取一个root凭证, 然后执行system("/bin/sh"),就乐意获取一个root shell.

看雪帖
详细分析
提权入门必看


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 15191
活跃值: (16857)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
2
学习,之前一直没成功,这次再试试
2018-9-5 08:36
0
游客
登录 | 注册 方可回帖
返回
//