Linux系统下解析Elf文件DT_RPATH后门

豆豆网   技术应用频道   2007年04月13日  【字号: 收藏本文

本文详细介绍Linux系统下解析Elf文件DT_RPATH后门

  一。前言

  前一段时间回顾elf文件方面的知识时,翻了以前很多优秀的文章,在xfocus的帮助文件unix版中看到了alert7大侠<> 这篇文章,看了一下时间9月/14号,那段时间忙着重修,没到网吧去。alert7没有贴代码,我想还是有人不了解,就把这篇文章写出来给大家整理性的介绍一下,这里指的是linux下。

  这篇文章不是介绍elf基础的文章,所以一些概念性的东西请参考elf鉴别,然后拿起你的gdb实际去了解一下啥叫got,plt,重定向的概念,了解一下动态连接和静态连接,用readelf或者objdump实际看一下,后面的参考中可以找到你需要的。文中错误再所难免,欢迎指正;)

  二。分析

  后门存在的原因:

  引自<>

  *动态数组标记DT_RPATH保存着目录列表的字符串(用冒号(:)分隔)。

  例如,字符串/home/dir/lib:/home/dir2/lib:告诉动态连接器先搜索/home/dir/lib,再搜索/home/dir2/lib,再是当前目录。

  LD_LIBRARY_PATH环境变量设置的目录在DT_RPATH指向的目录之后被搜索。而且出于安全考虑,动态连接器忽略set-user和set-group的程序的LD_LIBRARY_PATH所指定的搜索目录。但它会搜索DT_RPATH指明的目录和/usr/lib。所以这个DT_RPATH还是比较感兴趣的。

  有了以上的基本知识,我们可以在一个set-user的程序上安装一个DT_RPATH入口(一般程序都没有)。让其搜索路径首先为当前目录。把我们自己编写的库以其名字放到当前目录下,更让其加栽我们自己的动态库。这样我们就可以得到set-user的权限了。

  截获了__libc_start_main,肯定能确保ping 程序放弃特权之前执行。(假如截获malloc之类的就不能确保了)。因为我们用到了一些libc。so。6中的函数,所以我们需要把我们自己的LIB以libresolv。so。2的名字存放在当前目录下。

责编:豆豆技术应用

正在加载评论...