免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 独孤九贱
打印 上一主题 下一主题

新爆内核高危漏洞sock_sendpage的利用分析的讨论 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-08-19 22:35 |只看该作者
不错,九剑兄分析的很好。再接再厉。

论坛徽章:
0
22 [报告]
发表于 2009-08-19 22:39 |只看该作者
原帖由 CUDev 于 2009-8-19 21:14 发表
感觉exit_kernel()那个函数没有多少用处,可以直接声明为int kernel_code(),返回-1。kernel_code自动跳回到用户空间,然后直接调用execl()就好了。

另外,kernel_code()中可以调用标准库里面的函数吗?
ht ...


如果从kernel_code中返回, 应该是返回到sock_sendpage外面去了吧, 并不是直接返回用户态. 到时候控制流发生什么变化还不好说, 倒不如直接iret返回到用户态的好.

论坛徽章:
0
23 [报告]
发表于 2009-08-19 22:47 |只看该作者
那那个在kernel中执行的函数中调用C库的问题呢?

论坛徽章:
0
24 [报告]
发表于 2009-08-19 23:00 |只看该作者

回复 #23 CUDev 的帖子

我觉得应该是可以调的吧~
整个程序是在用户态编译的, 可以链接C库, kernel_code中调用C库的函数自然能够编译通过.
而既然已经在内核态调用了用户函数kernel_code, 那么kernel_code中调用C库函数应该也没问题.

论坛徽章:
0
25 [报告]
发表于 2009-08-19 23:01 |只看该作者
memset在编译的时候会不会已经被替换成相应的汇编代码呢?memcpy好像在编译的时候就是这么处理的。。

论坛徽章:
0
26 [报告]
发表于 2009-08-19 23:14 |只看该作者
这是memset编译后的结果

0x0000118d <give_it_to_me_any_way_you_can+233>: mov    0xffffffe8(%ebp),%eax
0x00001190 <give_it_to_me_any_way_you_can+236>: mov    %eax,%edi
---Type <return> to continue, or q <return> to quit---
0x00001192 <give_it_to_me_any_way_you_can+238>: cld   
0x00001193 <give_it_to_me_any_way_you_can+239>: mov    $0x0,%edx
0x00001198 <give_it_to_me_any_way_you_can+244>: mov    $0x8,%eax
0x0000119d <give_it_to_me_any_way_you_can+249>: mov    %eax,%ecx
0x0000119f <give_it_to_me_any_way_you_can+251>: mov    %edx,%eax
0x000011a1 <give_it_to_me_any_way_you_can+253>: rep stos %eax,%es%edi)

论坛徽章:
0
27 [报告]
发表于 2009-08-19 23:15 |只看该作者

回复 #24 kouu 的帖子

Kernel中是不能调用C库的,Kernel中自己实现了一些简单的类C库接口

论坛徽章:
0
28 [报告]
发表于 2009-08-19 23:18 |只看该作者

回复 #26 hackisle 的帖子

你拿之前的帖子中的exploit测试一下
http://www.securityfocus.com/dat ... derbar_emporium.tgz
我这边是:

  1. 0x08048a33 <give_it_to_me_any_way_you_can+223>:        movl   $0x1,0x804a7d4
  2. 0x08048a3d <give_it_to_me_any_way_you_can+233>:        movl   $0x20,0x8(%esp)
  3. 0x08048a45 <give_it_to_me_any_way_you_can+241>:        movl   $0x0,0x4(%esp)
  4. 0x08048a4d <give_it_to_me_any_way_you_can+249>:        mov    -0x10(%ebp),%eax
  5. 0x08048a50 <give_it_to_me_any_way_you_can+252>:        mov    %eax,(%esp)
  6. 0x08048a53 <give_it_to_me_any_way_you_can+255>:        call   0x804863c <memset@plt>
  7. 0x08048a58 <give_it_to_me_any_way_you_can+260>:        add    $0x24,%esp
  8. 0x08048a5b <give_it_to_me_any_way_you_can+263>:        pop    %ebx
  9. 0x08048a5c <give_it_to_me_any_way_you_can+264>:        pop    %ebp
  10. 0x08048a5d <give_it_to_me_any_way_you_can+265>:        ret   
复制代码

论坛徽章:
0
29 [报告]
发表于 2009-08-19 23:31 |只看该作者
0x0000118d <give_it_to_me_any_way_you_can+233>: mov    0xffffffe8(%ebp),%eax
0x00001190 <give_it_to_me_any_way_you_can+236>: mov    %eax,%edi
---Type <return> to continue, or q <return> to quit---
0x00001192 <give_it_to_me_any_way_you_can+238>: cld   
0x00001193 <give_it_to_me_any_way_you_can+239>: mov    $0x0,%edx
0x00001198 <give_it_to_me_any_way_you_can+244>: mov    $0x8,%eax
0x0000119d <give_it_to_me_any_way_you_can+249>: mov    %eax,%ecx
0x0000119f <give_it_to_me_any_way_you_can+251>: mov    %edx,%eax
0x000011a1 <give_it_to_me_any_way_you_can+253>: rep stos %eax,%es%edi)
0x000011a3 <give_it_to_me_any_way_you_can+255>: add    $0x1c,%esp
0x000011a6 <give_it_to_me_any_way_you_can+258>: pop    %ebx
0x000011a7 <give_it_to_me_any_way_you_can+259>: pop    %esi
0x000011a8 <give_it_to_me_any_way_you_can+260>: pop    %edi
0x000011a9 <give_it_to_me_any_way_you_can+261>: pop    %ebp
0x000011aa <give_it_to_me_any_way_you_can+262>: ret   

还是和原来一样,会不会是编译器版本的问题?

论坛徽章:
0
30 [报告]
发表于 2009-08-19 23:34 |只看该作者

回复 #27 CUDev 的帖子

内核代码中不能调用库函数, 我认为其原因是内核编译的时候没有去链接这些库.
但是这里的kernel_code跟这个不是一回事... 这里的kernel_code是用户程序的一部分, 用户程序在编译时是可以链接C库的.
如果是静态链接, 那么在用户程序的可执行文件中, C库已经是这个文件的一部分了. 调用C库函数和调用自己写的函数应该没什么区别.
如果是动态链接, 在用户程序被运行的时候, C库被map到进程空间里面, 然后被调用的函数的符号被解决...

[ 本帖最后由 kouu 于 2009-8-19 23:42 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP