文件的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,那我们是不是就获得了一个后门程序呢?

comments powered by Disqus