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

即使在unsetenv("LD_PRELOAD")之后,LD_PRELOAD也会影响新的孩子

LD_PRELOAD是一个环境变量,用于指定在程序加载时要预先加载的共享库。即使在调用unsetenv("LD_PRELOAD")之后,LD_PRELOAD仍然会影响新的子进程。

LD_PRELOAD的影响是因为它在程序加载时会被解析并加载指定的共享库,而这个过程是在程序执行之前发生的。即使在程序运行过程中修改了LD_PRELOAD的值或者将其删除,已经加载的共享库仍然会继续生效。

这种行为对于一些特定的场景非常有用,比如在程序运行时动态地修改或增强某些函数的行为。通过设置LD_PRELOAD,可以在程序加载时优先加载指定的共享库,从而覆盖原有函数的实现。

在云计算领域中,LD_PRELOAD的应用场景主要是在开发和调试过程中,用于修改或增强程序的行为。例如,可以使用LD_PRELOAD来拦截和修改网络通信的函数,实现网络数据的监控和调试。另外,还可以利用LD_PRELOAD来实现一些安全性增强的功能,比如对敏感函数进行监控和防护。

腾讯云相关产品中,与LD_PRELOAD相关的产品和服务可能包括云服务器(ECS)、容器服务(CVM)、函数计算(SCF)等。这些产品提供了灵活的计算资源和环境,可以满足开发者对于LD_PRELOAD的需求。具体的产品介绍和链接地址可以参考腾讯云官方文档:

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

相关·内容

干货 | Linux下权限维持实战

有趣的 LD_PRELOAD 前言 LD_PRELOAD 是 Linux 系统中的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库...首先,什么是链接 程序的链接主要有以下三种: •静态链接:在程序运行之前先将各个目标模块以及所需要的库函数链接成一个完整的可执行程序,之后不再拆开。...LD_PRELOAD LD_PRELOAD 是 Linux 系统中的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。...如上图所示,第一个 execve 是启动 PHP 解释器,而之后的 execve 则启动了新的系统进程,那就是 /usr/sbin/sendmail。...如果 mail() 函数也被禁用了,那我们可以在寻找其他可以启动新进程的函数即可,比如 error_log() 等。

1.8K30

LD_PRELOAD 后门 | bypass disable_functions

,不需要写任何内容 如果存在此文件,则动态链接程序将加载库的非优化版本,即使CPU支持优化版本也是如此。...unsetenv删除环境变量LD_PRELOAD,否则会导致下面system函数打开一个新进程执行的命令又再次使用到strcmp函数, 进入一个死循环, 而且我们写的劫持函数返回的结果是异常的, 就会导致服务器崩掉...vi 检查是否存在 LD_PRELOAD 后门的时候可以直接运行echo $LD_PRELOAD 可以看到完成变量设置之后执行vi就会执行ifconfig命令 遇到个奇怪的问题: 在完成以上操作后发现执行...which命令也会运行ifconfig命令很明显就是执行了劫持函数strcmp, 但是使用strace which查看which命令的运行过程又看不到strcmp函数的执行记录, strace不显示strcmp...0=LD_PRELOAD&1=/test/hack.so 因为在执行bash -c "export LD_PRELOAD=ifconfig"会执行里面的ifconfig命令然后把执行结果赋给LD_PRELOAD

87640
  • CTFHub:web-LD_PRELOAD-WP

    LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。...这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。...一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以以向别人的程序注入程序,从而达到特定的目的。putenv()用来改变或增加环境变量的内容....参数string 的格式为name=value, 如果该环境变量原先存在, 则变量内容会依参数string 改变, 否则此参数内容会成为新的环境变量....("LD_PRELOAD"); system("/readflag > /tmp/sunian"); } ​ 利用gcc进行编译,虽然报错了,但是不影响 gcc -shared -fPIC hack.c

    18810

    一种绕过php disablefunc的方法复现

    我们也知道在渗透测试中经常会出现这种情况,写了shell,但是执行不了系统函数,这个时候不妨看看php的PHP info(),页面,通常就是函数被禁用,被禁用的话会很尴尬,因为自己种的马骑不了,所以这个时候就想办法绕过了...原理解读 LD_PRELOAD的作用 LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。...这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。...一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以以向别人的程序注入程序,从而达到特定的目的 我们要做的就是通过修改环境变量LD_PRELOAD,让php启动新的进程的时候加载我们设置好的函数...,比如说system()这样一来,就可以做到bypass了,只要启用了新的进程就有机会加载我们在上一个进程中构造的函数,通过测试可知mail可以创建新的进程,另外一个问题就是,如何构造我们想执行的函数,

    1.7K30

    linux 链接器 库打桩

    all:out out: main.c mymalloc.o # -I . : so will use mymalloc # 编译最终运行程序时指定include优先检索当前目录,所以会读取当前目录的头文件...,而对于运行时打桩,只需要可以访问执行文件,利用动态链接器的LD_PRELOAD环境变量实现。...当加载程序时,解析未定义的引用时,动态链接器会先搜索LD_PRELOAD指定的库,然后才搜索其他,因此,通过把自己实现的动态库设置到这个环境变量,动态链接器加载时搜索的该库内有对应实现的函数,就会直接使用该函数而不会再搜索其他系统库.../out; unsetenv LD_PRELOAD ## 设定环境 export LD_PRELOAD="./mymalloc.so"; ..../out; unset LD_PRELOAD ## 其他任何的可执行程序都可以打桩 export LD_PRELOAD=".

    1.7K30

    ​disable_functions绕过总结

    ,所以一般使用base64编码 使用POC,并查看完整调用过程,直接去调用系统的echo命令,不受disable_functions影响,所以也就成功bypass 5、LD_PRELOAD劫持 (1)...:在静态情况下,它把库直接加载到程序里,而在动态链接的时候,只是保留接口,将动态库与程序代码独立 (2)LD_PRELOAD LD_PRELOAD是Linux系统的一个环境变量,用于动态库的加载 一般情况下动态库的搜索顺序.../lib 默认的动态库搜索路径/usr/lib 可以看出,LD_PRELOAD的优先级最高,因而能够影响程序运行时的链接,允许程序运行前优先加载动态链接库。...,在main()之前执行,与此对应的还有__attribute__ ((__destructor__))属性作为析构函数 重新测试新的c文件并编译,再执行php文件 #define _GNU_SOURCE...有大佬通过阅读文档发现,在处理ilbm的文件的时候会启动ilbmtoppm程序,于是本地strace下 又可以配合__attribute__ ((__constructor__))利用 构造简单的

    91321

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

    拿到WebShell之后可以通过phpinfo来寻找黑名单遗漏的危险函数。...环境变量 原理简介: LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。...> 浏览器访问.php文件,在蚁剑中可以看到生成了flag.txt文件 image-20220102000255462 注:unsetenv()可能在CentOS上无效,因为CentOS自己也hook...了unsetenv(),在其内部启动了其他进程,来不及删除LD_PRELOAD就又被劫持,导致无限循环,可以使用全局变量 extern char** environ删除,实际上,unsetenv()就是对...,之后上传php的shell,内容是使用php设定GCONV_PATH指向我们的gconv-modules文件,然后使用iconv函数使我们的恶意代码执行。

    5.3K20

    alictf2016_web_writeup

    感觉时间总算是转了一年,去年也大概是alictf才开始能做出签到题目以外的题目,今年强撸了一波alictf,不得不说,又遇到蓝莲花+0ops出题,web真的难度很高,比较蛋疼的是homework,说实话是一道想法很好很好的题目...,花了很长时间改,不过用了以前的通用脚本还是感觉不错的,在sqlmap不能用的情况,还是可以用,结尾贴github链接 先说题目,在login的时候有一个check请求存在注入,可以优化成盲注,登陆一个不存在的账户是提示账号密码错误...") == NULL) { return 0; } unsetenv("LD_PRELOAD"); payload(); } 编译为.so $ gcc -c -fPIC hack.c -o hack...> 都上传上去之后测试,果不其然失败了 这里就是权限的原因了,我用mysql传了.so,然后echo '233' > /tmp/test,而test是我用mysql新建的文件,这里权限不够写不进去,后来...") == NULL) { return 0; } unsetenv("LD_PRELOAD"); payload(); }

    21020

    ACTF 2022 writeup

    题目是一个用GoAhead起的Web server,和一个叫hello的cgi文件,有执行权限并且访问会输出当前的环境变量,除此之外也没什么别的,和文章中提的一样。...按照p牛的文章,先请求一下看看能不能直接注入LD_PRELOAD 先用curl发个POST请求,在表单中添加LD_PRELOAD=1发出去看看 这里补充一下对于CGI的内容,CGI是Web服务器和一个独立的进程之间的协议...LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库,一方面,我们可以以此功能来使用自己的或是更好的函数...首先是这个从界面上看,常规的注册登陆,登进去之后会提示需要成为Admin 所以先来看一下这部分功能的实现。...那么我们这里只需要将ascii转换成16进制即可,这里我用的是linux下的工具Okteta把原zip的ascii值复制出来,存成新的压缩包,也可以使用如下的python脚本。

    97120

    HFCTF 2022-EZPHP

    , 也给我带出了两个新的LFI方法 和一些Nginx的知识: Nginx-fastcgi缓存文件 长链接窗口期绕过文件检测 在这个题目中主要用到的就是nginx临时文件+LD_PRELOAD加载恶意so...)) void call () { unsetenv("LD_PRELOAD"); char str[65536]; system("bash -c 'cat /flag' >...在这里面存放有进程打开的全部资源文件的软链接, 最重要的是即使临时文件被删除了也还是一样可以被正常读取(至于原因我现在还是深表疑惑), 所以我们就可以将临时文件上传控制为我们的恶意so文件, 然后设置...env=LD_PRELOAD=/proc/pid/fd/file_id 之后执行的echo命令会加载我们so文件劫持的函数加载恶意代码从而获取flag 总结起来整个过程就是: 让后端 php 请求一个过大的文件...此外, 对于题目环境的docker来说, 打开的服务并不会很多, 所以pid也不会很大, 一般情况下例如我建立的docker中处理请求的Nginx Workerpid一直是二百多, 所以即使是从0开始逐渐遍历那也只需要跑

    22720

    F-Stack LD_PRELOAD 测试版介绍

    在此模式下,socket 相关接口返回的 fd 可以在不同线程交叉调用,即支持 PIPELINE 模式,对已有应用的移植接入更友好,但性能上相应也会有更多的损失。...限于时间所限,其中 LD_PRELOAD 的测试数据为以上测试环境的数据,其他为历史 40G 测试环境的数据,后续会更新为相同测试环境的数据。...受 CPU 硬件所限(12C24HT * 2),LD_PRELOAD 测试只能测试12组应用实例组,即使用了全部 CPU 的物理核心,无法进行更多实例组的测试。...8核之后 LD_PRELOAD 的性能不如原始 F-Stack 的性能,最主要是受用户应用程序和fstack应用程序的匹配度不高(ff_handle_each_context的循环次数及时间等)影响很大...export FF_KERNEL_EVENT=1 FF_MULTI_SC 在此模式下,用户应用程序与fstack实例相关联的上下文sc除了保存在全局变量sc中之外,会额外保存在全局的scs数组中,在fork

    1K30

    TryHackMe之Linux提权

    简介 提权是一个过程,没有一劳永逸的解决方案,而很大程度上取决于目标系统的具体配置。内核版本、安装的应用程序、支持的编程语言、其他用户的密码等都是影响你获取root权限的关键因素。...可以根据您的发现,您可以使用搜索引擎搜索现有的漏洞利用代码,也可以在https://www.linuxkernelcves.com/cves搜索,或者使用像LES(Linux Exploit Suggester...)的脚本发现可利用的漏洞代码,但可能会误报漏报 Hint: 在 Google、Exploit-db 或 searchsploit 上搜索漏洞时,对内核版本具体 在启动之前,请务必了解漏洞利用代码的工作原理...的C代码如下: #include #include #include void _init() { unsetenv("LD_PRELOAD...对于任何未内置于 shell 或未使用绝对路径定义的命令,Linux 将开始在 PATH 下定义的文件夹中搜索。如果您的用户具有写入权限的文件夹位于PATH中,您可能会劫持应用程序来运行脚本。

    1.3K30

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

    这个老漏洞的原理也很简单,就是GoAhead在处理CGI请求时,将用户传入的的参数作为环境变量了。这样,通过LD_PRELOAD就可以劫持CGI进程的动态链接库,进而执行任意代码。...这也是这个漏洞的第一个坑:新版本的GoAhead默认没有开启CGI配置,而老版本如果没有cgi-bin目录,或者里面没有cgi文件,也不受这个漏洞影响。所以并不像某些文章里说的那样影响广泛。...和PHP一样,GoAhead在遇到上传表单的时候,会先将这个上传的文件保存在一个临时目录下,待脚本程序处理完成后删掉这个临时文件。...而且爆破的请求本身也会导致这个数字继续上涨,这个过程十分不稳定,所以自然也不建议利用这个文件。 我们还是看回到文件描述符,什么情况下我们可以让这个文件描述符不要关闭?...由于上传流程没有结束,所以此时文件描述符是没有关闭的,可以通过/proc/self/fd/7读取到,脏字符也不影响动态链接库的加载和运行,最后即可成功完成劫持。

    59820

    sangebaimao之招聘又开始了,你怕了吗?

    > 在登陆的时候会把username encrypt之后放入username,username中的数据是被base64url_decode过的,其中数据应该是32位的,前16位是加密解密用到的位移iv...在waf中,我们很明显看到处理了4个部分 wafArr($_GET); wafArr($_POST); wafArr($_COOKIE); wafArr($_SESSION); 但是在user.php中...id=-1/**/SQL/**/QUERY 在处理时,#一般作为位置的标志符,是不会代入_GET的,但是在_REQUEST处理url的时候?...id=-1/**/SQL/**/QUERY&%20id=1 通过空格绕过了检查,只处理了后面的 利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令 文章原址 上一部注入没得到什么有效的信息只有一个提示...") == NULL) { return 0; } unsetenv("LD_PRELOAD"); payload(); }

    25720

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

    ​ 通过 LD_PRELOAD 进行动态链接器劫持是一种 Linux rootkit 技术,由不同的攻击者在野外使用。在本系列的第一部分中,我们将讨论此威胁并说明如何检测它。...Rootkit 可能难以检测和删除,因为它们利用高级技术来隐藏它们在系统上的存在。 为了实现不同的功能,rootkit 会拦截和更改正常的执行流程。...虽然它有许多合法用途,但攻击者也可以利用它,因为它允许覆盖动态链接程序使用的现有功能。此功能还使它们能够逃避检测、拦截机密并通常更改系统行为。...LD_PRELOAD和/etc/ld.so.preload之间的区别 /etc/ld.so.preload是一个系统范围的配置文件,适用于所有进程并影响整个系统。...LD_PRELOAD定义的库在/etc/ld.so.preload中的库之前加载。在野的利用动态链接器劫持 rootkit 技术已被许多攻击者使用。

    22010

    基于 Wazuh-常见主机入侵检测方法

    Linux 后门其实已经是进到系统层了,有了 linux 主机相关的管控权限之后,那么势必会在主机上有很多痕迹。做这块其实也覆盖了大部门主机入侵检测的场景。 ?...,动态链接器会先读取 LDPRELOAD 环境变量和默认配置文件 /etc/ld.so.preload,并将读取到的动态链接库文件进行预加载,即使程序不依赖这些动态链接库,LDPRELOAD 环境变量和...LD_PRELOAD 通过检测 $LD_PRELOAD 是否有值。.../usr/sbin/sshd, 脚本执行到 getpeername 这里的时候,正则匹配会失败,于是执行下一句,启动 /usr/bin/sshd,这是原始 sshd。...原始的 sshd 监听端口建立了 tcp 连接后,会 fork 一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的 /usr/sbin/sshd,这样子控制权又回到脚本了。

    9.8K50

    ELF格式分析与常用工具以及不常见问题

    好处是会让binary小很多,并且在binary中不会残留编译机器上的信息;坏处就是出了问题之后,不能debug。...这样子就可以让板子中的磁盘使用率降低,出了问题之后,把coredump文件copy到debug symbol目录下,不影响debug。...8,LD_PRELOAD 如果多个so有相同的symbol,LD_PRELOAD目录下的so中的symbol会被优先使用。 注意,这个环境变量很有用,同时也会带来安全问题。...例如,比较用户输入的密码使用strcmp函数,那么在LD_PRELOAD的so中实现了strcmp函数,就可以劫持用户输入的密码了。 再来一例,直接升级glibc是比较危险的,可能会让系统启动不起来。...那么可以使用LD_PRELOAD导入新的glibc,验证没有问题之后,再升级。 9,cpp constructor & destructor ? 如示例代码,会是怎样的打印顺序?

    2.2K70

    误修改 libc.so.6 急救

    ,如果ssh已断开则无法重新连接上,得使用另外的方法用光盘重启进入急救模式): 在同版本系统上查看/lib64/libc.so.6得知是属于libc-2.5.so的软链接,因此,libc-2.5.so文件肯定还是存在的...2.5.so /lib64/libc.so.6 注意的是,这整条命令要在同一行执行,不能分两行,否则就无效了 glibc是一个非常底层的库,bash也依赖她,所以,如果把这个库干掉了,基本上啥事都干不了了...是这样的,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

    磁盘:最容易被忽略的性能洼地

    当有新的数据写入需要替换旧的数据时,主控制器将把新的数据写入到另外的空白闪存空间上(已擦除状态),然后更新逻辑LBA 地址来指向到新的物理FTL 地址。...(2) 将libfork.so添加到环境变量LD_PRELOAD中 在UNIX中,LD_PRELOAD是一个可以影响程序的运行时链接的环境变量,让你可以定义在程序运行前优先加载的动态链接库。...这样我们就实现了区分进程和场景的I/O 信息收集。 在介绍了我们的工具原理之后,来看一下采集的I/O 日志信息,包括文件路径、进程、线程、读/ 写文件的次数、大小和耗时以及调用的堆栈。 ?...(1)修改环境变量LD_PRELOAD 这种方式实现最简单,重写系统函数open、read、write和close,将so库放进环境变量LD_PRELOAD中,这样程序在调用系统函数时,会先去环境变量里面找...获取到了这么多数据,我们在之后的推送中将向大家介绍一些数据库相关的案例,看其如何应用。

    1.2K20
    领券