文件的s标志位
文件的S标志位
文件的 rwx 标志位,分别是 read,write,execute,用数字表示是 4,2,1.
那么文件的s标志位呢?
s标志位是 SET UID属性,指的是,这个文件在运行的时候会拥有文件所有者的权限,只要牵扯到权限这个词,那就好玩了。
S标志位的前提:文件必须是二进制可执行文件。
各种脚本是不行的,因为脚本中调用了其他的一些二进制程序,然而这些二进制程序并不具备S标志位,所以脚本的S标志位无效。
鸟哥的书上是用了 passwd 这个程序来说的,passwd的owner是root,而且passwd也具备s标志位,所以当你在运行passwd这个程序的时候就会拥有root的权限,这个root权限只是在当你运行passwd程序时所拥有的,不过,如果你要是能溢出passwd的话,你就可以提权了 :)
做一个小测试:
普通用户是无法读取 /etc/shadow 这个文件的内容的,因为这个文件的权限是640,所有者是root,用户组是shadow,只有shadow用户组的人或者root用户才能够读取里面的内容。那么我们就来写个小程序毒一下里面的内容:
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *file;
char ch;
if( (file = fopen("/etc/shadow","r")) == NULL ){
printf("Permission denied!\n");
exit(1);
}
ch = fgetc(file);
while(ch != EOF){
putchar(ch);
ch = fgetc(file);
}
fclose(file);
getch()
}
gcc catshadwo.c -o catshadow
编译之后运行一下,如果不是root用户或者shadow用户组的人运行这个程序,就会提示不允许这样做。
那么我们把这个文件给root,然后再给他s标志位:
sudo chown root catshadow && sudo chmod +s catshadow
OK,再来运行一下就可以读取shadow里面的内容了。
然后看一下程序的USER:
啊哈~root~
那么
那么可以利用这一点来干什么呢?
如果我们在目标主机上留下了一个设置有S标志位的文件,而且这个文件的所有者是root,那我们是不是就获得了一个后门程序呢?