使用“。”设置环境变量“PATH”是否有危险?

使用“。”设置环境变量“PATH”是否有危险?

我即将参加一次考试,回顾过去几年,他们总是会问类似的问题。基本上,设置以下内容会造成安全漏洞:

PATH=".:/bin:/usr/bin"

我知道当用户调用诸如“ls”之类的命令时,PATH 决定了要搜索可执行文件的绝对目录。我只是不确定上述操作会导致什么行为。

似乎它会首先检查当前目录(基于“.”)是否存在“/bin”目录,如果没有,则转到绝对目录“/usr/bin”。问题是,如果用户调用“ls”,而攻击者在当前目录中创建了“/bin”,则它可能包含一个 ls 版本,例如,它会删除一堆文件。

这是正确的吗,还是我误解了 PATH 符号?

答案1

PATH=".:/bin:/usr/bin"

您误解了符号,冒号是分隔符,因此这将在以下位置进行检查(按顺序)

  1. “。”当前目录
  2. “/bin”通常是存储关键二进制文件的地方
  3. “/usr/bin”通常是存储不太重要的二进制文件的地方

路径上有“/bin”和“/usr/bin”是完全正常的。

路径上有“.”是很危险的,尤其是作为第一个搜索位置时,因为当前目录通常是可以由一个或多个其他用户写入的目录。这些用户可以在目录中创建文件,而您可能会无意中执行这些文件(例如,通过创建名为“ls”的文件),从而使他们的代码能够由您的用户执行。

相关内容