利用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. mysql:刚刚知道的冷知识(一)

    唯一索引的值可以null 1.创建一张user表,name字段指定为唯一索引 create table user( id int primary key auto_increment, name va ...

  2. Python3-sqlalchemy-orm 联表查询-无外键关系

    #-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import crea ...

  3. 1.3w字,一文详解死锁!

    死锁(Dead Lock)指的是两个或两个以上的运算单元(进程.线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁. 1.死锁演示 死锁的形成分为两个方面,一个是使用 ...

  4. 启动线程组报错:Error occurred starting thread group :test_1, error message:Invalid duration 0 set in Thread Group:test_1, see log file for more details

    线程组基础信息都已经配置好,启动时报错,如下图: 排查原因:勾选了线程组调度器,并未设置参数 解决方案:取消勾选或者设置参数

  5. Java调用腾讯云短信接口,完成验证码的发送(不成功你来砍我!!)

    一.前言 我们在一些网站注册页面,经常会见到手机验证码的存在,这些验证码一般的小公司都是去买一些大的厂家的短信服务,自己开发对小公司的成本花费太大了!今天小编就带着大家来学习一下腾讯云的短信接口,体验 ...

  6. Django——Auth模块(用户认证模块)

    1.Auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象. 而有了auth模块之后就可以很轻松的去验证用 ...

  7. ubantu与CentOS虚拟机之间搭建GRE隧道

    Author       : Email         : vip_13031075266@163.com Date          : 2020.01.23 Copyright : 未经同意不得 ...

  8. CommonsCollections2 反序列化利用链分析

    在 ysoserial中 commons-collections2 是用的 PriorityQueue reaObject 作为反序列化的入口 那么就来看一下 java.util.PriorityQu ...

  9. Java-SpringBoot整合SpringCloud

    SpringBoot整合SpringCloud 1. SpringCloud特点 SpringCloud专注于为典型的用例和扩展机制提供良好的开箱即用体验,以涵盖其他情况: 分布式/版本化配置 服务注 ...

  10. vscode快速添加引号 批量增加引号(用于批量格式化代码)

    一.在浏览器中将Params复制到pycharm的py文件中 二.选中需要添加引号的部分,Ctrl+H 调出替换工具栏 三.填写正则表达式 (.*?): (.*) '$1':'$2', 右侧注意点击使 ...