LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1297|回复: 18

问个 suid 的问题

[复制链接]
发表于 2005-6-17 21:22:09 | 显示全部楼层 |阅读模式
测试程序:

[root@localhost ~]# cat test.c
#include <stdlib.h>

int main()
{
system("cat /proc/kmsg");
return 0;
}


设置suid后:
[rick@localhost ~]$ ll
total 292
-rwsr-xr-x 1 root root 4754 Jun 17 12:01 a.out


普通用户运行:
[rick@localhost ~]$ ./a.out
cat: /proc/kmsg: Permission denied


为什么会权限不够? suid 应该怎么用?

环境:fc3
发表于 2005-6-17 21:23:35 | 显示全部楼层
因为,调用system的时候已经fork了,不一个进程.
回复 支持 反对

使用道具 举报

发表于 2005-6-17 21:25:20 | 显示全部楼层
suid的进程fork之后子进程还有没有root权限我不太清楚,不过看起来也只有这种可能了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-17 21:27:25 | 显示全部楼层
Post by Tetris
因为,调用system的时候已经fork了,不一个进程.

嗯,这个类似的解答我已经看到过了

那现在的问题是,缓冲区溢出是针对suid的程序,然后执行用execve产生一个shell的方式获得root权限的,如何做到?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-17 21:29:39 | 显示全部楼层
Post by Tetris
suid的进程fork之后子进程还有没有root权限我不太清楚,不过看起来也只有这种可能了。

我查了点资料说,suid不可传递,就是说fork出来后就没有suid属性了
回复 支持 反对

使用道具 举报

发表于 2005-6-17 21:31:28 | 显示全部楼层
Post by rickxbx
嗯,这个类似的解答我已经看到过了

那现在的问题是,缓冲区溢出是针对suid的程序,然后执行用execve产生一个shell的方式获得root权限的,如何做到?


如果execve bash ./program应该没有fork新进程吧?不太清楚,那篇shellcode的文章还没看完。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-17 21:34:38 | 显示全部楼层
Post by Tetris
如果execve bash ./program应该没有fork新进程吧?不太清楚,那篇shellcode的文章还没看完。

呵呵.为什么你的思维跟我的思维就这么相近呢 ^_^
好,下面的问题是,我又写了一个程序:
#include <unistd.h>

int main()
{
        char *name[2];
        name[0] = "/bin/sh";
        name[1] = 0;

        execve(name[0],name,0);
}

设了suid后,仍然不能得到root权限,再下去就不明白了~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2005-6-17 21:51:43 | 显示全部楼层
Post by rickxbx
呵呵.为什么你的思维跟我的思维就这么相近呢 ^_^
好,下面的问题是,我又写了一个程序:
#include <unistd.h>

int main()
{
        char *name[2];
        name[0] = "/bin/sh";
        name[1] = 0;

        execve(name[0],name,0);
}

设了suid后,仍然不能得到root权限,再下去就不明白了~~~~~~~~~~


呵呵,你可以翻一下apue英文版214页,最上面的图8.7,如果被exec的文件suid,则有效用户权限变为文件的所有者;如果没有suid,则有效用户限权为进程实际用户。所以,上面那个程序如果是suid,则它有root权限,但如果它再调用exec,则又变成实际用户权限。所以,执行的shell是没有root权限的。
回复 支持 反对

使用道具 举报

发表于 2005-6-17 21:53:31 | 显示全部楼层
至于shellcode的是怎么回事,就不知道了……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-17 22:44:43 | 显示全部楼层
Post by Tetris
呵呵,你可以翻一下apue英文版214页,最上面的图8.7,如果被exec的文件suid,则有效用户权限变为文件的所有者;如果没有suid,则有效用户限权为进程实际用户。所以,上面那个程序如果是suid,则它有root权限,但如果它再调用exec,则又变成实际用户权限。所以,执行的shell是没有root权限的。

手边没有这本书,囊中羞涩啊~~~~~~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表