介绍
PATH是Linux和类Unix操作系统中的环境变量,它指定存储可执行程序的所有bin和sbin目录。当用户在终端上运行任何命令时,它会通过PATH变量来响应用户执行的命令,向shell发送请求以搜索可执行文件。超级用户通常还具有/ sbin和/ usr / sbin条目以便于执行系统管理命令。
SUID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。一旦程序拥有SUID权限的话,运行该程序时会以最高权限运行。
查看$PATH变量
1 | fire@fire-Box:~$ echo $PATH |
环境搭建
我们需要先生成一个具有SUID权限的程序,所以先编写一个c语言程序,代码如下:
1 |
|
然后对其进行编译,并给编译出来的赋予SUID权限(chmod u+s pwn
等同于chmod 4755 pwn
)
开始提权
根据文章 Linux Privilege Escalation Using PATH Variable 中提到的4种提权方法,实际上可以归结为1种,就是修改环境变量调用 /bin/bahs
程序。下面来看具体操作:
1 | find . -perm -u=s -type f 2>/dev/null # 在当前目录下查找具有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
命令,这种方式更快些。
1 | ln -s /bin/bash ps |