【发布时间】:2021-08-04 13:18:56
【问题描述】:
可以通过调用执行shell命令的system函数来执行shell命令。
这显然不安全,因为有人可以滥用程序并执行攻击者特定的操作系统命令。
不要使用特权程序(set-user-ID 或 set-group-ID 程序,或具有功能的程序),因为 某些环境变量的奇怪值可能用于 颠覆系统完整性。例如,可以操纵 PATH 以便以特权执行任意程序。使用 exec(3) 系列函数,而不是 execlp(3) 或 execvp(3)(也使用 PATH 环境变量来搜索 对于可执行文件)。
虽然我不太了解其中的区别。是的,权限可能会有所不同,但我们仍然执行 os 命令并且它仍然容易受到攻击,不是吗?我错过了什么吗?
如何安全地执行系统命令而不用担心会被滥用?
【问题讨论】:
-
选项 1:你不能。选项 2:您知道程序应该安装在哪里,并在对
execv()或execve()的调用中安全地指定程序的完整路径名。如果你不知道程序应该安装在哪里,你可能会被卡住。 -
如果我限制输入中的特殊字符怎么办?它会完全覆盖攻击者可能进行的注入吗?
-
——哪些特殊字符?除非您将有效字符限制在允许的字符的限制列表中(例如,无重音的拉丁字母、数字、下划线以及点和斜线(但可能不包括破折号),否则您迟早可能会遇到问题。即便如此,也可能攻击者可以使用的技巧来搞砸事情。这部分取决于攻击者对程序运行的环境(尤其是环境变量)的控制程度。