目录
案例三(__attribute__&LD_PRELOAD劫持)
案例四(利用 LD_PRELOAD 绕过 Disable_Functions)
案例五(利用 error_log() 启动新进程来劫持系统函数)
前提知识
环境变量
Linux 系统提供了多种方法来改变动态库连接器装载共享库路径的方法。通过使用此类方法,我们可以实现一些特殊的需求,如:动态库的调试、改变应用程序的行为方式等。
链接
编译器找到程序中所引用的函数或全局变量所存在的位置
- 静态链接:在程序运行之前先将各个目标模块以及所需要的库函数链接成一个完整的可执行程序,之后不再拆开。
- 装入时动态链接:源程序编译后所得到的一组目标模块,在装入内存时,边装入边链接。
- 运行时动态链接:原程序编译后得到的目标模块,在程序执行过程中需要用到时才对它进行链接。
- 对于动态链接来说,需要一个动态链接库,其作用在于当动态库中的函数发生变化对于可执行程序来说时透明的,可执行程序无需重新编译,方便程序的发布/维护/更新。但是由于程序是在运行时动态加载,这就存在一个问题,假如程序动态加载的函数是恶意的,就有可能导致一些非预期的执行结果或者绕过某些安全设置。
LD_PRELOAD
LD_PRELOAD允许你定义在程序运行前优先加载的动态链接库,那么我们便可以在自己定义的动态链接库中装入恶意函数.假设现在出现了一种这样的情况,一个文件中有一个恶意构造的函数和我们程序指令执行时调用的函数一模一样,而LD_PRELOAD路径指向这个文件后,这个文件的优先级高于原本函数的文件,那么优先调用我们的恶意文件后会覆盖原本的那个函数,最后当我们执行了一个指令后它会自动调用一次恶意的函数,这就会导致一些非预期的漏洞出现
1 .so后缀就是动态链接库的文件名 。
2 export LD_PRELOAD=*** 是修改LD_PRELOAD的指向 。
3 我们自定义替换的函数必须和原函数相同,包括类型和参数 。
4 还原LD_PRELOAD的最初指向命令为:unset LD_PRELOAD 。
5 unset LD_PRELOAD 还原函数调用关系
LD_LIBRARY_PATH
LD_LIBRARY_PATH可以临时改变应用程序的共享库(如:动态库)查找路径,而不会影响到系统中的其他程序。
ELF文件
ELF文件是一种用于二进制文件、可执行文件、目标代码、共享库和core转存格式文件。是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的,也是Linux的主要可执行文件格式。
/bin、/sbin、/usr/sbin、/usr/bin
从命令功能角度:
- /sbin 下的命令属于基本的系统命令,如shutdown,reboot,用于启动系统,修复系统
- /bin下存放一些普通的基本命令,如ls,chmod等,这些命令在Linux系统里的配置文件脚本里经常用到
从用户权限的角度:
- /sbin目录下的命令通常只有管理员才可以运行
- /bin下的命令管理员和一般的用户都可以使用
/usr/sbin存放的一些非

最低0.47元/天 解锁文章
656

被折叠的 条评论
为什么被折叠?



