在linux权限当中,除了rwx三种基本权限之外,还有三种特殊权限,SUID、SGID、SBIT三种,例如以下:
SUID
即SET UID权限,其只出现于二进制文件拥有者执行权限x上,标注为s,其作用是如果执行者有其对应执行权限x,那么在程序运行过程中,程序将获得程序拥有者的权限
举个例子:
我们可以看到 passwd命令有s权限,且owner为root,其他用户有x执行权限,而/etc/shadow默认全0,所以当我们以用户(kali)权限去执行passwd设置密码时,其会暂时获取root权限,然后向/etc/shadow中写入hash值
注意的是,s权限只有二进制程序有效,shell脚本或目录是无效的,因为这个权限的存在,如果程序有漏洞可以被利用,我们就可以通过此方式获取更高的权限,例如如果owner 为root的二进制程序有set uid权限,且存在任意命令执行,那么我们就可以通过这个程序进行root提权
以下命令可以发现系统上运行的所有SUID可执行文件。具体来说,命令将尝试查找具有root权限的SUID的文件。
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
已知的可用来提权的linux可执行的文件列表如下:
Nmap
Vim
find
Bash
More
Less
Nano
cp