免费注册 查看新帖 |

Chinaunix

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

剖析一个由sendfile引发的linux内核BUG [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
11 [报告]
发表于 2010-01-15 10:37 |只看该作者
该BUG的另外一个exploit的代码连接为:
http://www.securityfocus.com/dat ... rbar_emporium-3.tgz
这个测试代码更为详细,而且区分了多种情况。
通过其脚本wunderbar_emporium.sh来进行各种条件的判断和程序的编译:

下面就是脚本中对于可以直接mmap 0地址的条件进行的处理,具体有疑问的地方见下面的红色部分
MINADDR=`cat /proc/sys/vm/mmap_min_addr 2> /dev/null`
# Case 1: 如果没有变量mmap_min_addr,或者其值为0,则表示可以直接mmap 0地址。
# 这是仅使用expoit程序即可。
if [ "$MINADDR" = "" -o "$MINADDR" = "0" ]; then
        echo "MINADDR not exist or equals to 0."
    cc -fno-stack-protector $OPT_FLAG -o exploit exploit.c 2> /dev/null
    if [ "$?" = "1" ]; then
       cc $OPT_FLAG -o exploit exploit.c
    fi
        #这里将视频文件tzameti.avi追加到exploit程序中,因为该程序中要读取该文件。
        #但尚不清楚exploit.c中调用函数extract_and_play_video()的实际意义.当前条件下
        #屏蔽掉对extract_and_play_video的调用,仍然可以获取到root权限。

    cat tzameti.avi >> ./exploit
    ./exploit

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
12 [报告]
发表于 2010-01-15 13:18 |只看该作者
分析的不错,顶一个

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
13 [报告]
发表于 2010-01-15 16:38 |只看该作者
还是那个脚本的内容,第二种情形:
elif [ ! -f '/usr/sbin/getenforce' ]; then
    cc -fno-stack-protector -fPIC $OPT_FLAG -shared -o exploit.so exploit.c
    cc $OPT_FLAG -o pwnkernel pwnkernel.c
  ./pwnkernel


这里是在mmap_min_addr不为0的情况下,要设置personality为PER_SVR4,并通过pluseaudio程序,来触发漏洞。如果系统上没有这个程序,好像就没法expoit了。

论坛徽章:
0
14 [报告]
发表于 2010-01-15 17:07 |只看该作者
原帖由 Godbach 于 2010-1-15 16:38 发表
还是那个脚本的内容,第二种情形:


这里是在mmap_min_addr不为0的情况下,要设置personality为PER_SVR4,并通过pluseaudio程序,来触发漏洞。如果系统上没有这个程序,好像就没法expoit了。



pluseaudio是用来bypass selinux的,2.6.27以后的selinux接口中有如下代码, pluseaudio程序正好有CAP_SYS_RAWIO权能。


291static int cap_file_mmap(struct file *file, unsigned long reqprot,
292                         unsigned long prot, unsigned long flags,
293                         unsigned long addr, unsigned long addr_only)
294{
295        if ((addr < mmap_min_addr) && !capable(CAP_SYS_RAWIO))
296                return -EACCES;
297        return 0;
298}

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
15 [报告]
发表于 2010-01-15 17:14 |只看该作者
295        if ((addr < mmap_min_addr) && !capable(CAP_SYS_RAWIO))

W.Z.T兄的意思,通过使pulseaudio使跳过第二个判断为价,因此使程序函数正常返回?

论坛徽章:
0
16 [报告]
发表于 2010-01-15 17:15 |只看该作者
原帖由 Godbach 于 2010-1-15 17:14 发表

W.Z.T兄的意思,通过使pulseaudio使跳过第二个判断为价,因此使程序函数正常返回?


是的

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
17 [报告]
发表于 2010-01-15 17:17 |只看该作者
但是同样还是需要映射0地址吧。

但是如果我在没有开启SElinux,就没有必要使用pulseaudio吧

论坛徽章:
0
18 [报告]
发表于 2010-01-15 17:19 |只看该作者
原帖由 Godbach 于 2010-1-15 17:17 发表
但是同样还是需要映射0地址吧。

但是如果我在没有开启SElinux,就没有必要使用pulseaudio吧


是的, 而且是2.6.27以后的内核才需要pulseaudio这个文件来bypass selinux。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
19 [报告]
发表于 2010-01-15 17:26 |只看该作者
原帖由 W.Z.T 于 2010-1-15 17:19 发表


是的, 而且是2.6.27以后的内核才需要pulseaudio这个文件来bypass selinux。


现在我测试的环境是,SElinux disabled。但是mmap_min_addr是大于0的。

这中情况下,如果设置PER_SVR4,W.Z.T兄觉得可以成功的映射0地址吗?

论坛徽章:
0
20 [报告]
发表于 2010-01-15 17:52 |只看该作者
原帖由 Godbach 于 2010-1-15 17:26 发表


现在我测试的环境是,SElinux disabled。但是mmap_min_addr是大于0的。

这中情况下,如果设置PER_SVR4,W.Z.T兄觉得可以成功的映射0地址吗?


兄弟都有测试环境了, 为什么不试试? 还是在故意考验我呢, 呵呵。 我的理解是在2.6.18系统上你能设置PER_SVR4, 就能映射0地址。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP