颠覆Linux系统上的execute标志。为什么会这样呢?
在阅读本文的同时,我发现了以下漏洞: % cp /usr/bin/id ~ % chmod -x ~/id % ls -al ~/id -rw-r--r-- 1 edd edd 22020 2012-08-01 15:06 /home/edd/id % ~/id zsh: permission denied: /home/edd/id % /lib/ld-linux.so.2 ~/id uid=1001(edd) gid=1001(edd) groups=1001(edd),1002(wheel) 此代码片段表明,我们可以像普通的非特权用户一样轻易地避开文件系统的执行权限。我在Ubuntu 12.04上运行它。 虽然Linux加载器是file(1)的共享对象,但它也具有允许直接执行的入口点。当以这种方式执行时,Linux加载程序将充当ELF二进制文件的解释器。 但是,在我的OpenBSD机器上,此利用无效,因为您可能未将加载程序作为程序执行。OpenBSD手册页显示:“ ld.so本身是一个共享对象,最初由内核加载。” 在Solaris 9上尝试此操作,您将遇到段错误。我不确定其他地方会发生什么。 因此,我的问题是: 为什么Linux加载器(直接执行时)在解释ELF二进制文件之前不检查文件系统属性? 为什么要实施一种机制,该机制被设计成不允许执行文件(如果它被轻易地绕开了)?我错过了什么吗?