在阅读本文时,我发现了以下漏洞:
% 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)
Run Code Online (Sandbox Code Playgroud)
这个片段表明我们可以作为普通的非特权用户轻松地回避文件系统的执行权限。我在 Ubuntu 12.04 上运行了这个。
虽然 Linux 加载器根据 file(1) 是一个共享对象,但它也有一个允许直接执行的入口点。当以这种方式执行时,Linux 加载器充当 ELF 二进制文件的解释器。
然而,在我的 OpenBSD 机器上,此漏洞利用并不有效,因为您可能不会将加载程序作为程序执行。OpenBSD 手册页说:“ld.so 本身是一个最初由内核加载的共享对象。”。
在 Solaris 9 上试试这个,你会得到一个段错误。我不确定其他地方会发生什么。
因此,我的问题是:
我如何知道已经运行的进程加载了哪些共享库?
我正在使用 Linux。
在我的 Linux 机器上,我libboost*.so
在上述所有目录中都有 boost 库(文件)。我想知道它们之间有什么区别。我可以删除重复的 so 文件吗?
我正在尝试使用与 /lib64 中的 ld-linux-x86-64.so.2 不兼容的共享库。我没有 root 访问权限,因此无法更改 /lib64 中的文件。有没有办法告诉我的 RHEL5.7 盒子使用不同的 ld-linux-x86-64.so.2?我已经尝试将路径放在我需要在 $LD_LIBRARY_PATH 中使用的版本,但它在那里被忽略了。
我有一个与一些共享库打包在一起的可执行文件。可执行文件主要与机器上已经找到的库一起使用,但每隔一段时间就会崩溃并指向我从 /lib 使用的库之一。当我将可执行文件附带的一些库添加到我的 LD_LIBRARY_PATH 时,它会导致诸如 'ls' 'cp' 'ldd' 之类的简单命令的分段错误 ld-linux-x86-64.so.2 的一个版本也出现了使用此可执行文件,当我运行命令 ./ld-linux-x86-64.so.2 --list libc.so (或导致命令中断的其他库)时,它不会导致段错误。我希望能够使用随软件打包的 ld-linux-x86-64.so.2 进行测试,以确保解决了问题(并且没有 t 导致其他人)在去 IT 并让他们对我们将运行软件的所有机器上进行更改之前。或者,如果可能的话,将变通方法构建到我的工作脚本中,这样我就不必经历整个变更请求过程。
包含的 libc.so 与 ld-linux.so 不兼容的一个症状是当我尝试执行命令时如下所示。 cp:重定位错误:libc.so.6:符号 _dl_tls_get_addr_soft,版本 GLIBC_PRIVATE 未在文件 ld-linux-x86-64.so.2 中定义,带有链接时间参考 我是唯一一个使用我的机器的人,但我的公司赢了不要向用户授予 root 访问权限,因为如果您在一个 linux 机器上拥有 root 权限,那么网络的设置方式就是您在所有这些机器上都拥有它。
有谁知道是否可以从他们的网站下载最新的 OpenSSL 共享库?
我只能找到来源,所以也许他们不提供它。我知道我可以从源代码自己构建它,但我需要找到一个(可靠的)位置,我可以将人们指向,以便他们自己下载。
我需要 Linux、Solaris 和 Windows。