sudo+SETENV(环境变量)提权
sudo运行时默认会启用env_reset选项将从命令行设置的环境变量复原,因此通常情况下,当使用sudo命令时,通过本地修改环境变量也没法替换目标文件来进行提权,但如果sudo在配置时为用户设置了SETENV选项,情况就不一样了。SETENV会允许用户禁用env_reset选项,允许sudo使用当前用户命令行中设置的环境变量,如下图:sudo允许当前用户以root身份执行一个shell脚本,并为当前用户配置了SETENV,shell脚本是打印syslog最后几行。
如果没有配置SETENV,这里是无法通过改环境变量把tail替换成一个vim命令来进行提权的。这里有SETENV,那么就可以设置环境变量
一、从/bin目录复制一个vim,并命名为tail存在/tmp目录下
二、通过下面的命令,将/tmp目录放置在PATH环境变量的最前面
export PATH=/tmp:$PATH
三、通过下面的命令即可运行我们伪造的tail命令,从而用vim进行提权
sudo --preserve-env=PATH /usr/bin/check_syslog.sh
--preserve-env会使用当前新的PATH作为环境变量,并禁用env_reset选项,从而达到先执行我们伪造的tail命令的目的
* sudo也可以直接支持对环境变量进行赋值
所以也可以用以下命令进行提权
export PATH=/tmp:$PATH sudo PATH=$PATH /usr/bin/check_syslog.sh