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