首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为LD_PRELOAD设置我的lib会使某些进程产生加载器错误

LD_PRELOAD是一个环境变量,用于在运行时指定要预加载的共享库。通过设置LD_PRELOAD,可以在程序加载时优先加载指定的共享库,从而覆盖系统默认的库。

当你为LD_PRELOAD设置自己的库时,可能会导致某些进程产生加载器错误。这是因为你的库可能与进程依赖的其他库存在冲突或不兼容。加载器错误可能包括库加载失败、符号冲突、链接错误等。

解决这个问题的方法有几种:

  1. 检查库的兼容性:确保你的库与目标进程依赖的其他库兼容。可以使用工具如ldd来查看进程依赖的库,并与你的库进行比较。
  2. 解决符号冲突:如果你的库与目标进程依赖的其他库存在符号冲突,可以尝试使用命名空间或重命名符号来解决冲突。
  3. 调整加载顺序:可以尝试调整LD_PRELOAD中库的加载顺序,确保你的库在其他依赖库之前加载。
  4. 使用动态链接器选项:可以使用动态链接器选项来控制库的加载行为。例如,可以使用LD_LIBRARY_PATH指定库的搜索路径,或使用LD_DEBUG选项来调试库加载过程。

需要注意的是,LD_PRELOAD是一个强大但潜在危险的功能,不正确使用可能导致系统不稳定或安全漏洞。在使用LD_PRELOAD时,务必谨慎并确保了解其影响和风险。

相关链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

HFCTF 2022-EZPHP

在 /var/lib/nginx/fastcgi 下产生临时文件。.../fastcgi产生一个存放相应内容的临时文件, 但其实这个过程可以说是稍纵即逝,文件创建到删除的窗口期根本不足以让我们及时的就行文件加载, 这时候就用到了记录进程信息的文件夹/proc/pid/fd。...env=LD_PRELOAD=/proc/pid/fd/file_id 之后执行的echo命令会加载我们so文件劫持的函数加载恶意代码从而获取flag 总结起来整个过程就是: 让后端 php 请求一个过大的文件...为了让每个worker进程都有一个cpu可以使用,尽量避免了多个worker进程抢占同一个cpu, 所以通常Nginx Worker不会大于服务器中cpu的核心数量此, 外为了避免cpu在切换进程时产生性能损耗...如果打开了配置设置为On的话那我们题目中所加载的so文件是fastcgi文件夹下的还是body文件夹下的我们也不得而知了哈哈哈。

22720

LD_PRELOAD 后门 | bypass disable_functions

LD_PRELOAD 后门 用途 主要是用于绕过 disable_functions ,本质上是加载顺序的问题, 动态链接库加载过程中会先加载 LD_PRELOAD 指向的变量,这样我们可以利用这个先加载来进行劫持正常的函数和命令...unsetenv删除环境变量LD_PRELOAD,否则会导致下面system函数打开一个新进程执行的命令又再次使用到strcmp函数, 进入一个死循环, 而且我们写的劫持函数返回的结果是异常的, 就会导致服务器崩掉...vi 检查是否存在 LD_PRELOAD 后门的时候可以直接运行echo $LD_PRELOAD 可以看到完成变量设置之后执行vi就会执行ifconfig命令 遇到个奇怪的问题: 在完成以上操作后发现执行...puts()函数,但是/bin/pwd和/usr/bin/pwd是外部函数可以加载外部共享库进而通过覆盖的puts()执行payload 我自己看到的 按照上面文章说法劫持失败原因是因为pwd命令默认执行的是内置命令...export设置的环境变量只在当前shell有效 # 例如在xshell一个窗口设置好LD_PRELOAD变量后再打开一个窗口输出LD_PRELOAD变量显示为空 cat /proc/PID/environ

87440
  • 干货 | 突破disable_functions限制执行命令·上

    相当一个黑名单,可以用来设置PHP环境禁止使用某些函数,通常是网站管理员为了安全起见,用来禁用某些危险的命令执行函数等。...想要利用LD_PRELOAD环境变量绕过disable_functions需要注意以下几点: 能够上传自己的.so文件 能够控制LD_PRELOAD环境变量的值,比如**putenv()**函数 因为新进程启动将加载...) 位于 系统共享对象 c.so 中,所以系统为该进程加载共享对象 c.so,想办法在加载 c.so 前优先加载可控的 c_evil.so,c_evil.so 内含与 b() 同名的恶意函数,由于 c_evil.so...sendmail调用的C函数(函数最好不带参数),内部为恶意代码,编译为.so文件,如geteuid()函数 3.运行PHP函数putenv(),设定我们的so文件为LD_PRELOAD,设置后新进程启动时将优先加载我们设置的...gcc允许为函数设置如下属性,可以让其修饰的函数在mail()函数之前执行,若它出现在共享对象中时,那么一旦共享对象被系统加载,将立即执行。

    5.3K20

    干货 | Linux下权限维持实战

    但是由于程序是在运行时动态加载,这就存在一个问题,假如程序动态加载的函数是恶意的,就有可能导致一些非预期的执行结果或者绕过某些安全设置。...: gcc -shared -fPIC hook_strncmp.c -o hook_strncmp.so 然后通过环境变量 LD_PRELOAD 来设置 hook_strncmp.so 能被其他调用它的程序优先加载...•PHP 环境下劫持系统函数注入代码 虽然 LD_PRELOAD 为我提供了劫持系统函数的能力,但前提是我得控制 PHP 启动外部程序才行,并且只要有进程启动行为即可,无所谓是谁。...如上图所示,第一个 execve 是启动 PHP 解释器,而之后的 execve 则启动了新的系统进程,那就是 /usr/sbin/sendmail。...>// 运行 PHP 函数 putenv(), 设定环境变量 LD_PRELOAD 为 hook_getuid.so, 以便后续启动新进程时优先加载该共享对象。

    1.8K30

    应急响应系列之Linux库文件劫持技术分析

    一、我与库文件劫持的前世今生 0x01 菜逼阶段 Linux库文件劫持这种案例在今年的9月份遇到过相应的案例,当时的情况是有台服务器不断向个可疑IP发包,尝试建立连接,后续使用杀软杀出木马,重启后该服务器还是不断的发包...LD_PRELOAD环境变量,加载恶意库文件 /etc/ld.so.preload加载恶意的库文件(主流的劫持技术) 更改默认的库文件/etc/ld.so.preload为其他库文件 其中第二条是目前遇到的最多的...LD_PRELOAD=/lib/f1c8d7.so 将LD_PRELOAD的值设置为要预加载的动态链接库 2....3.3.3 劫持分析 正常情况下,我们可以看到其默认加载的库为/etc/ld.so.preload ?...) 更改默认的库文件/etc/ld.so.preload为其他库文件 因此,检测这一块也是针对性的进行检测 4.1分析LD_PRELOAD环境变量 比较简单,直接echo$LD_PRELOAD即可查看是否存在针对环境变量的劫持行为

    2.1K10

    GoAhead环境变量注入复现踩坑记

    这个老漏洞的原理也很简单,就是GoAhead在处理CGI请求时,将用户传入的的参数作为环境变量了。这样,通过LD_PRELOAD就可以劫持CGI进程的动态链接库,进而执行任意代码。...今天这个漏洞实际上是对老漏洞的一次绕过,漏洞原理不是本文重点,我用两段简单的文字进行描述: 补丁对用户传入参数进行了黑名单过滤,LD_PRELOAD这类参数不再设置为环境变量。...但是我们看老的漏洞CVE-2017-17562,当时是将LD_PRELOAD设置成标准输入,即LD_PRELOAD=/proc/self/fd/0。...我们的目的是在服务器上上传一个可控内容的文件,然后将环境变量LD_PRELOAD设置为这个文件的路径,这样来劫持动态链接库。很容易想到另一个方法就是通过上传文件的形式来创建文件。...设置为不超过16384的值,但需要比payload.so文件的大小要大个500字节左右,我这里设置为15000 发送这个数据包,就可以成功劫持到LD_PRELOAD: 这里的原理其实就是,pyaload.so

    59420

    ​disable_functions绕过总结

    /lib 默认的动态库搜索路径/usr/lib 可以看出,LD_PRELOAD的优先级最高,因而能够影响程序运行时的链接,允许程序运行前优先加载动态链接库。...\n"); return 0; } 首先编译动态链接库hack.so,然后设置LD_PRELOAD为hack.so文件。...解除依赖 (5)利用思路 本地伪造.c文件劫持某个函数并生成一个动态链接库文件.so 上传该文件至服务器 利用php中putenv()设置LD_PRELOAD路径为该文件 配合php中某个函数去触发构造的动态链接库文件...Web服务器的错误日志,或者到一个文件中,而且当第二个参数message_type为1时,message 发送到参数 destination 设置的邮件地址,同样会调用外部程序sendmail 于是就类似...mail了,可以通过劫持某个特定函数或者利用constructor属性来达到任意命令执行 8、Imagick Imagick在处理一些特定格式的文件时,会调用外部某些程序启动子进程,就会加载LD_PRELOAD

    91321

    TryHackMe之Linux提权

    ) -A选项可以查看所有运行中的进程;axjs选项可以查看进程树;aux选项可以查看所有用户的进程、启动进程的用户和未附加到终端的进程,使用这个选项我们可以更好地了解系统和潜在的漏洞 env 这个命令可以获取到系统的环境变量...,PATH 变量可能具有编译器或脚本语言(例如 Python),可用于在目标系统上运行代码或用于提权 sudo -l 目标系统可能配置为允许用户以root权限运行某些(或全部)命令。...ServerConfigFile),这样就可以使用此选项加载 /etc/shadow 文件将导致包含 /etc/shadow 文件第一行的错误消息 利用 LD_PRELOAD LD_PRELOAD 是一个允许任何程序使用共享库的函数...如果启用env_keep选项,我们可以生成一个共享库,它将在程序运行之前加载并执行,注意如果真实用户 ID 与有效用户 ID 不同,LD_PRELOAD 选项将被忽略 这种方法提权的步骤如下: 检查 LD_PRELOAD...我们可以使用 getcap 工具列出启用的Capabilities,当以非特权用户身份运行时,getcap -r / 会产生大量错误,因此最好将错误消息重定向到 /dev/null,即getcap -r

    1.3K30

    雪城大学信息安全讲义 六、输入校验

    如果这些库变成了木马,许多事情就会发生错误。 攻击者可以改变这个路径,并使程序加载攻击者的库。...LD_PRELOAD 许多 UNIX 系统允许你预加载共享库,通过设置环境变量LD_PRELOAD。这允许你做一些有趣的事情,比如将 C 标准库的函数或者甚至系统调用的 C 接口换成你自己的函数。...猜测字段名称:第一步就是猜测数据库的一些字段名称 下面猜测了字段名称email: 如果我们得到了服务器错误,就意味着我们的 SQL 格式错误,并且抛出了语法错误。最可能是由于错误的字段名称。...过滤输入 配置错误报告:上面的攻击利用了由服务器返回的错误信息。通过不告诉用户 SQL 查询中实际的错误信息,可以使攻击者更加困难。例如,你可以只说something is wrong。...使用预定义参数,所以用户的输入仅仅被看做数据,引号、反斜杠和 SQL 注释记号不会产生影响,因为它们也仅仅被看做数据,并且不会解释为 SQL。

    57710

    F-Stack LD_PRELOAD 测试版介绍

    FF_MULTI_SC 模式 该模式为 Nginx 等使用内核SO_REUSEPORT且fork子进程 worker 运行等特殊的设置为设置,需要设置额外的编译参数后来编译libff_syscall.so...,在fork()子进程 worker 时会使用 current_worker_id设置sc变量为对应 worker 进程 fd 对应的 sc,供子进程复制及使用。...Nginx 的reuseport模式的主要流程为,主进程为每个 worker 分别调用 socket()、bind()、listen()等接口,并复制到 worker 进程,而后 woker 进程各自调用...限于时间所限,其中 LD_PRELOAD 的测试数据为以上测试环境的数据,其他为历史 40G 测试环境的数据,后续会更新为相同测试环境的数据。...()子进程 worker 时会使用 current_worker_id设置sc变量为对应 worker 进程 fd 对应的 sc,供子进程复制及使用。

    1K30

    教程 | 如何利用Google Colab免费训练StarCraft II

    第一个猜想:没有找到需要的库 我最初的猜测是,StarCraft II 作为一个游戏,可能需要某些 OpenGL 函数和库,而这些并不包含在我所用的 Google Colab 环境中。...由于所有的库都通过操作系统加载了,这样一来,我就能够跟踪任何一个缺失的依赖项,或者查看是否有什么奇怪的事情发生。...回到我追踪 StarCraft II 的时候,我记得只看到 C/C++库被加载了。这似乎不正确,TCMalloc 是从哪里来的呢?...通过在 Linux 上设置 LD_PRELOAD 环境变量,你可以加载 TCMalloc 共享库到程序中,强制让程序使用 TCMalloc。...解决方案 不幸的是,设置 LD_PRELOAD 环境变量并不能传播到环境的其他部分中。 通过执行以下命令: !

    1.7K70

    无需 sendmail:巧用 LD_PRELOAD 突破 disable_functions

    设想这样一种思路:利用漏洞控制 web 启动新进程 a.bin(即便进程名无法让我随意指定),a.bin 内部调用系统函数 b(),b() 位于系统共享对象 c.so 中,所以系统为该进程加载共 c.so...查看进程调用系统函数明细。linux 创建新进程的过程较为复杂,我关心进程加载了哪些共享对象、可能调用哪些 API、实际调用了哪些 API。...注意,LD_PRELOAD 是进程独占环境变量,类似于命令适配器,它与待执行命令间必须为空白字符,而非命令分隔符(;、&&、||)。 找寻内部启动新进程的 PHP 函数。...虽然 LD_PRELOAD 为我提供了劫持系统函数的能力,但前提是我得控制 php 启动外部程序才行(只要有进程启动行为即可,无所谓是谁)。...mail.php 内增加设置 LD_PRELOAD 的代码: ?

    2K10

    使用LDPRELOAD绕过disablefunctions

    因此,在某些情况下,我已经在远程服务器上获得了一个webshell,但我却因为 disable_functions而无法使用一些特定的系统函数。因此,我在本文中将展示突破这种难题的方法。...php putenv("");和直接写入 php.ini文件的区别混淆,实际上,我们可以在官方文档中找到答案:添加设置到服务器环境。环境变量仅存在于当前请求状态下。...运行新进程的原因就像我上面提到的,我需要重新启动服务来改变 LD_PRELOAD的值。...在我的webshell中: putenv("LD_PRELOAD=/var/www/html/evil.so");mail("a","b","c","d"); 第一行用来预加载evil共享库。...但我们可以使函数在主函数之前运行劫持新启动的进程。当 mail()尝试启动一个新的子进程时, evil.so会再次加载。 3.如果 mail()也被禁止,我们需要找到的是另一个可以启动新进程的函数。

    1.1K40

    Linux共享库、静态库、动态库详解

    lib目录下,但是如果某些库是在系统启动的时候要加载的,则放到/lib目录下,而那些不是系统本身一部分的库则放到/usr/local/lib下面。...ldconfig不设置链接器名称; 通常这是在库安装期间完成的,链接器名称简单地创建为“最新”的soname或最新的真实名称的符号链接。...我建议将链接器名称作为与soname的符号链接,因为在大多数情况下,如果您更新库,那么您希望在链接时自动使用它。我问HJ Lu为什么ldconfig不会自动设置链接器名称。...我认为这是一个错误,并在/etc/ld.so.conf中添加/ usr / local / lib是在Red Hat派生系统上运行许多程序所需的常见“修复”。...环境变量LD_PRELOAD列出了覆盖标准集的函数的共享库,就像/etc/ld.so.preload一样。这些由加载器/lib/ld-linux.so实现。

    8.9K11

    误修改 libc.so.6 急救

    ,误删的只是软链接而已,但此时想用ln命令重新建立软链接是失败的,但是可以这样强制设置变量就能执行成功 LD_PRELOAD=/lib64/libc-2.5.so  ln -s /lib64/libc-...,但是为啥前面设置一下LD_PRELOAD变量 就可以了呢?...是这样的,LD_PRELOAD可以影响程序的运行时的链接(Runtime linker), 它允许你定义在程序运行前优先加载的动态链接库,之前把libc.so.6这个软连接给干掉了,所以系统找不到这个库了...,但是通过LD_PRELOAD设置一下glibc这个库的真实地址就可以解决这个问题了 通过前面设置一下LD_PRELOAD变量,后面也是可以执行其它例如cp,mv等命令的 例如我一开始不是误删,只是把libc.so....6改名了,从而也导致了上面的错误,于是就可以按照下面方法恢复libc.so.6 LD_PRELOAD=/lib64/libc-2.5.so mv /lib64/libc.so.6.bak /lib64

    4.1K50

    Linux rootkit 深度分析 – 第1部分:动态链接器劫持

    它保存用户指定的ELF共享对象的列表,使用户能够在任何其他共享库之前以及程序本身执行之前将这些共享对象加载到进程的地址空间中。...最后,通过运行unset LD_PRELOAD取消设置环境变量。...不同的是,LD_PRELOAD是一个环境变量,它允许单个用户为每个进程指定要为特定可执行文件或命令预加载的库。因此,您无需成为 root 用户即可使用它。...LD_PRELOAD定义的库在/etc/ld.so.preload中的库之前加载。在野的利用动态链接器劫持 rootkit 技术已被许多攻击者使用。...如果存在差异,则这些文件可能是隐藏在某些命令中的攻击的一部分。 如果在容器上使用运行时检测工具,请确保它支持加载到内存中的偏移执行库。偏移执行检测在部署容器后添加或修改的可执行文件。

    21710

    linux 什么是SO文件

    编译:得到输出文件libs.o gcc -fPIC -g -c s.c -o libs.o ———————————————————————- -fPIC: -fPIC作用于编译阶段,告诉编译器产生与位置无关代码...(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意 位置,都可以正确的执行。...这个特性使得在Linux下,升级使得共享库的程序和定位错误变得十分容易。   .../e & 屏幕上就开始不停有信息输出了,当然TS Quit你是看不到的,前面是个死循环,后面会用到这句 ———————- & 放在启动参数后面表示设置此进程为后台进程。.../ts 关键就在LD_PRELOAD上了,这个路径指定的so将在所有的so之前加载,并且符号会覆盖后面加载的so文件中的符号。如果可执行文件的权限不合适(SID),这个变量会被忽略。 执行:.

    5.8K20
    领券