- 论坛徽章:
- 0
|
本帖最后由 splendid12 于 2012-02-25 19:14 编辑
实验1:
# vim 1
contents:
#!/bin/bash
cat /etc/passwd
# chmod a+x 1
此时没有 s 权限
$ ./1 可以执行
疑惑:
为什么能执行啊?一般用户怎么访问到了 /etc/passwd 呢?
实验2:
好吧,既然 /usr/bin/passwd 是 ELF 可执行文件,我用 C 写一个 可执行文件好了:
# vim 2.c
contents
#include <stdio.h>
int main() {
FILE *fp = NULL;
if((fp = fopen("/etc/passwd", "ra")) == 0)
exit(1);
char str[50] = {0};
fscanf(fp, "%s\n", str);
fclose(fp);
puts(str);
exit(0);
}
# gcc 2.c
$ ./a.out
竟然能执行?!成功打印了 /etc/passwd 的第一行
我没有设置 SUID 啊!
但是一般用户确实能够从 ./a.out 中获得 /etc/passwd 的结果!
--------------------------------------------------------------------------------------------------------
我对 suid 困惑了。。
|
|