系统安全性如何(“/ bin / ls”);

时间:2015-09-12 18:36:35

标签: c linux security

我知道如果你覆盖PATH变量,你可以调用system("ls");这样的调用。

但是当用户没有system("/bin/ls");的写入权限时,如何绕过/bin /ls的来电?

请不要告诉我这不兼容OS,我知道这不是问题的关键。

谢谢!

2 个答案:

答案 0 :(得分:2)

这会导致类似:

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冲击类漏洞(例如sh本身中的错误),这可能是好的。 (如果有人不了解这些问题然后编辑成代码是不安全的shell命令,那就不行了......)

答案 1 :(得分:0)

用户可以将ls/bin/ls定义为函数。

使用...

ls () { echo 'No.'; }

和...

/bin/ls () { echo 'NO!'; }

但是,您可以在执行ls/bin/ls之前取消设置,以防止这种情况发生......

使用...

unset -f ls /bin/ls