我即将参加一次考试,回顾过去几年,他们总是会问类似的问题。基本上,设置以下内容会造成安全漏洞:
PATH=".:/bin:/usr/bin"
我知道当用户调用诸如“ls”之类的命令时,PATH 决定了要搜索可执行文件的绝对目录。我只是不确定上述操作会导致什么行为。
似乎它会首先检查当前目录(基于“.”)是否存在“/bin”目录,如果没有,则转到绝对目录“/usr/bin”。问题是,如果用户调用“ls”,而攻击者在当前目录中创建了“/bin”,则它可能包含一个 ls 版本,例如,它会删除一堆文件。
这是正确的吗,还是我误解了 PATH 符号?
答案1
PATH=".:/bin:/usr/bin"
您误解了符号,冒号是分隔符,因此这将在以下位置进行检查(按顺序)
- “。”当前目录
- “/bin”通常是存储关键二进制文件的地方
- “/usr/bin”通常是存储不太重要的二进制文件的地方
路径上有“/bin”和“/usr/bin”是完全正常的。
路径上有“.”是很危险的,尤其是作为第一个搜索位置时,因为当前目录通常是可以由一个或多个其他用户写入的目录。这些用户可以在目录中创建文件,而您可能会无意中执行这些文件(例如,通过创建名为“ls”的文件),从而使他们的代码能够由您的用户执行。