环境变量提权
本文最后更新于:2023年8月25日 下午
[TOC]
环境变量提权
通过控制$PATH环境变量
的几种方法来获取远程主机的root权限
什么是$PATH?
$PATH是Linux和类Unix操作系统中的环境变量,它指定了存储所有可执行程序的bin和sbin目录。当用户在终端运行任何命令时,它向shell发出请求,在环境变量的帮助下搜索可执行文件以响应用户执行的命令。超级用户通常还具有/sbin和/usr /sbin条目,以便轻松执行系统管理命令。
使用echo
命令就能轻易的查看和当前用户相关的环境变量。
1 |
|
原理
我认为环境变量提权的原理就是在环境变量最前面篡改某个命令的绝对路径(例如将/tmp/cat
加在$PATH
前),然后当我们执行某个命令的时候会优先从环境变量的最前面去找这个命令的路径,这里假设某一个脚本shell
(具有SUID权限)执行cat
命令,那么寻找到/tmp/cat
,其内容为/bin/bash
,那么根据SUID提权,就会以root权限执行/bin/bash
,就成功提权到root了
举例
现在我们的当前目录是/home/raj,我们将在当前目录下创建一个srcipt目录。然后cd到script目录中,编写一个简单的c程序来调用系统二进制文件的函数。
1 |
|
demo.c:
1 |
|
然后使用gcc编译demo.c文件,给经过编译的文件赋予SUID权限
1 |
|
发起攻击
首先,你需要先入侵靶机系统并且进入到提权阶段。假设你已经通过ssh成功登录到了靶机上,二话不说,我们直接使用find命令来搜索具有SUID或4000权限的文件。
1 |
|
通过执行上述命令,攻击者可以遍历任何可执行文件,在这里我们可以看到/home/raj/script目录下的shell文件具有SUID权限,如图:
于是我们cd到/home/raj/script/目录下,ls一下,看到了名为shell的可执行文件。
1 |
|
提权成功
除了echo
命令,也可以使用copy
、symlink
命令
1 |
|
1 |
|
环境变量提权的关键就是找到一个具有SUID
权限的可执行文件,并且它会调用某些系统命令,我们就可以通过修改环境变量来调用自定义的命令中的内容