我知道,如果您覆盖 PATH 变量,您可以进行诸如 system("ls");
之类的调用,做任何您想做的事情。
但是,当用户没有 /bin/ls
的写入权限时,如何绕过对 system("/bin/ls");
的调用呢?
请不要告诉我这与操作系统不兼容,我知道,这不是问题的重点。
谢谢!
最佳答案
这会导致类似的情况:
execve("/bin/sh", ["sh", "-c", "/bin/ls"], [/* 66 vars */]) = 0
所以并没有给太多的回旋余地,虽然我们可以创建一个 function /bin/ls { ... }
,对于上面的调用来说,当 sh
时实际上是bash
bash
不读取.rc文件,也不调用该函数。
$ /bin/ls
hello world
$ type -a /bin/ls
/bin/ls is a function
/bin/ls ()
{
echo hello world
}
/bin/ls is /bin/ls
$ cat dols.c
#include <stdlib.h>
int main(void)
{
system("/bin/ls");
return 0;
}
$ ./dols
dols dols.c trace.9594 trace.9595
$
除了环境黑客(例如通过 ls
变量使 LD_
与其他库链接)或 shell shock 类漏洞(例如 sh
本身的错误)之外,这可能没问题。 (如果不了解这些问题的人将代码编辑为不安全的 shell 命令,那就不行了……)
关于c - 系统安全性如何(("/bin/ls");,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32542350/