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

干货 | Linux下权限维持实战

有趣 LD_PRELOAD 前言 LD_PRELOAD 是 Linux 系统中一个环境变量,它可以影响程序运行链接(Runtime linker),它允许你定义在程序运行前优先加载动态链接库...但是由于程序是在运行时动态加载,这就存在一个问题,假如程序动态加载函数是恶意,就有可能导致一些非预期执行结果或者绕过某些安全设置。...LD_PRELOAD LD_PRELOAD 是 Linux 系统中一个环境变量,它可以影响程序运行链接(Runtime linker),它允许你定义在程序运行前优先加载动态链接库。...LD_PRELOAD Hook 由于 LD_PRELOAD 可以指定在程序运行前优先加载动态链接库,那我们可以重写程序运行过程中所调用函数并编译成动态链接库文件,然后通过指定 LD_PRELOAD...: gcc -shared -fPIC hook_strncmp.c -o hook_strncmp.so 然后通过环境变量 LD_PRELOAD设置 hook_strncmp.so 能被其他调用它程序优先加载

1.6K30

终端程序不支持 SOCKS5 HTTP 代理怎么办?有了这个神器后,终于可以跨越高山和大海了!

但是由于这些终端程序默认并不支持 Socks 5 代理或 HTTP 代理 通常我们解决方法就是使用环境变量 export ALL_PROXY=socks5://proxyAddress:port 或者...返回成功后,这个程序以为自己连是原始地址,但其实连是 graftcp-local 地址。这个就叫“移花接木”。...如果直接往运行在子进程被跟踪程序 buffer 添加信息,可能会造成缓冲区溢出,造成程序崩溃或者覆盖了其他数据。...主要有:全局式、设置环境变量式和仅针对程序(或进程)式。 全局式:比如使用 iptables + RedSocks 可以把系统符合一定规则流量转换为 SOCKS5 流量。...设置环境变量方式:一些程序启动时会读取 proxy 相关环境变量来决定是否将自己数据转换为对应代理协议流量,比如 curl 会读取 http_proxy, ftp_proxy, all_proxy

5.8K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    LD_PRELOAD 后门 | bypass disable_functions

    unsetenv删除环境变量LD_PRELOAD,否则会导致下面system函数打开一个新进程执行命令又再次使用到strcmp函数, 进入一个死循环, 而且我们劫持函数返回结果是异常, 就会导致服务器崩掉...-fPIC /test/strcmp_hook.c -o hack.so -ldl 设置 LD_PRELOAD export LD_PRELOAD=/test/hack.so 运行命令触发覆盖函数...vi 检查是否存在 LD_PRELOAD 后门时候可以直接运行echo $LD_PRELOAD 可以看到完成变量设置之后执行vi就会执行ifconfig命令 遇到个奇怪问题: 在完成以上操作后发现执行...,对其进行劫持 # 可以在php文件里面只执行一个函数,然后我们就可以看到该函数执行了哪些系统命令 查看环境变量方式: echo LD_PRELOAD env set export #值得注意是...export设置环境变量只在当前shell有效 # 例如在xshell一个窗口设置LD_PRELOAD变量后再打开一个窗口输出LD_PRELOAD变量显示为空 cat /proc/PID/environ

    85240

    CTFHub:web-LD_PRELOAD-WP

    大致步骤如下 生成一个我们恶意动态链接库文件 利用putenv设置LD_PRELOAD我们恶意动态链接库文件路径 配合php某个函数去触发我们恶意动态链接库文件 RCE并获取flag 这里面的某个函数需要在运行时候能够启动子进程...,这样才能重新加载我们设置环境变量,从而劫持子进程所调用库函数。...LD_PRELOAD是Linux系统一个环境变量,它可以影响程序运行链接(Runtime linker),它允许你定义在程序运行前优先加载动态链接库。...这个功能主要就是用来有选择性载入不同动态链接库中相同函数。通过这个环境变量我们可以在主程序和其动态链接库中间加载别的动态链接库,甚至覆盖正常函数库。...一方面,我们可以以此功能来使用自己或是更好函数(无需别人源码),而另一方面,我们也可以以向别人程序注入程序,从而达到特定目的。putenv()用来改变或增加环境变量内容.

    17410

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

    应用程序在通过系统接口调用内核时会预先加载动态链接库, 即使程序不依赖这些动态链接库,LD_PRELOAD环境变量和/etc/ld.so.preload配置文件中指定动态链接库依然会被加载。...动态编译:不论程序依赖不依赖动态链接库,都会加载LD_PRELOAD环境变量和/etc/ld.so.preload配置文件中指定动态链接库依然会被装载 7....LD_PRELOAD=/lib/f1c8d7.so 将LD_PRELOAD设置为要预加载动态链接库 2....四、如何检测库文件劫持 前面我们看到针对Linux库文件劫持,常用方法就三种: 更改LD_PRELOAD环境变量,加载恶意库文件 /etc/ld.so.preload加载恶意库文件(主流劫持技术...4.3.1 分析LD_PRELOAD环境变量劫持 根据Linux预加载机制,相应系统命令都会加载LDPRELOAD环境变量指定内容,因此可以通过strace来跟踪相应系统命令加载库文件来分析,我们知道

    2.1K10

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

    此功能有多种用途,包括调试、测试和运行时检测,可以通过写入文件/etc/ld.so.preload或使用环境变量LD_PRELOAD来使用。...运行ls并检查所有目录条目。5. 导出到LD_PRELOAD共享对象位置: export LD_PRELOAD=/tmp/working-dir-test/libhijackls.so6....再次运行ls,您将看到我们成功劫持了该函数,并且输出不包含“malicious_file”。7. 最后,通过运行unset LD_PRELOAD取消设置环境变量。...不同是,LD_PRELOAD是一个环境变量,它允许单个用户为每个进程指定要为特定可执行文件或命令预加载库。因此,您无需成为 root 用户即可使用它。...对于LD_PRELOAD:搜索使用意外环境变量执行进程(每个进程所有环境变量都位于/proc/{pid}/environ下)。如果您发现不常见库路径,请检查它。

    18410

    无需 sendmail:巧用 LD_PRELOAD 突破 disable_functions

    ;第三种,mod_cgi 模式,尝试修改 .htaccess,调整请求访问路由,绕过 php.ini 中任何限制;第四种,利用环境变量 LD_PRELOAD 劫持系统函数,让外部程序加载恶意 *.so...由于程序运行时会根据命令行选项、运行环境作出不同反应,导致真正运行时调用 API 可能只是 readefl 查看子集,你可以运行 strace -f /usr/bin/id 2>&1 跟踪实际 API...linux 环境变量 LD_PRELOAD 是一种类似 win32 API hook 更优雅实现,适用于打热补丁、读取进程空间数据、禁止程序调用指定 API、调试程序等等场景,甚至可以在不更改原始可执行文件前提下植入后门...最后,借助环境变量 LD_PRELOAD 劫持系统函数 getuid(),获取控制权。...mail.php 内增加设置 LD_PRELOAD 代码: ?

    2K10

    一种绕过php disablefunc方法复现

    fz41=system(ls); 没有任何回显 环境配置成功,我们任务就是通过劫持函数方法来绕过这个disable_functions 限制,利用环境变量 LD_PRELOAD 劫持系统函数,让外部程序加载恶意...原理解读 LD_PRELOAD作用 LD_PRELOAD是Linux系统一个环境变量,它可以影响程序运行链接(Runtime linker),它允许你定义在程序运行前优先加载动态链接库。...这个功能主要就是用来有选择性载入不同动态链接库中相同函数。通过这个环境变量我们可以在主程序和其动态链接库中间加载别的动态链接库,甚至覆盖正常函数库。...一方面,我们可以以此功能来使用自己或是更好函数(无需别人源码),而另一方面,我们也可以以向别人程序注入程序,从而达到特定目的 我们要做就是通过修改环境变量LD_PRELOAD,让php启动新进程时候加载我们设置函数...因此,可以通过这个方式来构造函数,把我们要执行命令放在环境变量里,执行时直接加载环境变量命令,就可以做到绕过了 代码类似这种 #define _GNU_SOURCE #include <stdlib.h

    1.7K30

    解密BadUSB:世界上最邪恶USB外设

    ; ‍‍ 重复编程外设‍‍ ?...注:在Linux/Unix操作系统,LD_PRELOAD是一个环境变量,可以影响程序运行链接(Runtimelinker),设置程序运行前优先加载动态链接库。...通过这个环境变量,可以在主程序和其动态链接库中间加载别的动态链接库,甚至覆盖正常函数库。...一方面,我们可以以此功能来使用自己或是更好函数(无需别人源码),而另一方面,我们也可以以向别人程序注入恶意程序,从而达到那不可告人罪恶目的。 ‍‍‍‍2....Android转移Windows机器网络流量‍‍‍‍‍‍‍ “我能借用你笔记本给手机充电?”Android手机是最简单USB攻击平台。 ?

    1.3K80

    Linux下内存检测工具asan使用介绍

    1、编译选项 1.1 Gcc编译选项 -fsanitize=address:开启内存越界检测 -fsanitize-recover=address:一般后台程序为保证稳定性,不能遇到错误就简单退出,而是继续运行...,采用该选项支持内存出错之后程序继续运行,需要叠加设置ASAN_OPTIONS=halt_on_error=0才会生效;若未设置此选项,则内存出错即报错退出, ASAN_CFLAGS += -fsanitize...2、ASAN运行选项 2.1 ASAN_OPTIONS设置 ASAN_OPTIONS是Address-Sanitizier运行选项环境变量。...LSAN_OPTIONS是LeakSanitizier运行选项环境变量,而LeakSanitizier是ASAN内存泄漏检测模块,常用运行选项有: exitcode=0:设置内存泄露退出码为0,默认情况内存泄露退出码...其次,平台软件通常都会内部实现一套内存操作接口,为使用asan工具,需要替换成glibc提供接口。此时,可以通过LD_PRELOAD环境变量解决这类问题。

    8.5K20

    GoAhead服务器 远程命令执行漏洞 分析报告

    结合glibc动态链接器,攻击者就可以使用特殊环境变量(如LD_PRELOAD)导致执行任意代码。 安恒信息应急响应中心也将对该漏洞进行持续关注,并第一时间为您更新相关漏洞信息。...漏洞信息 2 漏洞描述 近日GoAhead官方发出安全公告,服务器通过GET参数设置环境变量导致了恶意LD_PRELOAD环境变量设置,进而使得漏洞攻击者获得远程命令执行权限,影响不容小觑。...该数组将作为接下来cgi调用环境变量。可以看出正式这里对于参数过滤不全,导致了用户可以修改CGI程序LD_PRELOAD环境变量。...漏洞复现 payload.c 将payload.c编译成动态链接库.so文件 查看编译好文件 如果用该文件作为LD_PRELOAD动态链接库文件运行运行任意程序则会有如下效果。...查看CGI程序0号fd文件,发现这是一个符号链接,指向一个tmp文件,我们再查看该tmp文件,最终确认该文件正是我们上传恶意动态链接库文件。

    1.1K100

    干货分享 | GoAhead服务器 远程命令执行漏洞(CVE-2017-17562) 分析报告

    结合glibc动态链接器,攻击者就可以使用特殊环境变量(如LD_PRELOAD)导致执行任意代码。 安恒信息应急响应中心也将对该漏洞进行持续关注,并第一时间为您更新相关漏洞信息。...漏洞信息 2漏洞描述 近日GoAhead官方发出安全公告,服务器通过GET参数设置环境变量导致了恶意LD_PRELOAD环境变量设置,进而使得漏洞攻击者获得远程命令执行权限,影响不容小觑。...该数组将作为接下来cgi调用环境变量。可以看出正式这里对于参数过滤不全,导致了用户可以修改CGI程序LD_PRELOAD环境变量。 ? 漏洞复现 payload.c ?...查看编译好文件 ? 如果用该文件作为LD_PRELOAD动态链接库文件运行运行任意程序则会有如下效果。 ? 可以看到payload.so中代码成功运行。 验证poc: ?...查看CGI程序0号fd文件,发现这是一个符号链接,指向一个tmp文件,我们再查看该tmp文件,最终确认该文件正是我们上传恶意动态链接库文件。 ?

    1.6K120

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

    环境变量 原理简介: LD_PRELOAD是Linux系统一个环境变量,它可以影响程序运行链接(Runtime linker),它允许你定义在程序运行前优先加载动态链接库。...这个功能主要就是用来有选择性载入不同动态链接库中相同函数。通过这个环境变量我们可以在主程序和其动态链接库中间加载别的动态链接库,甚至覆盖正常函数库。...一方面,我们可以以此功能来使用自己或是更好函数(无需别人源码),而另一方面,我们也可以以向别人程序注入程序,从而达到特定攻击目的。...我们通过环境变量 LD_PRELOAD 劫持系统函数,可以达到不调用 PHP 各种命令执行函数(system()、exec() 等等)仍可执行系统命令目的。...sendmail调用C函数(函数最好不带参数),内部为恶意代码,编译为.so文件,如geteuid()函数 3.运行PHP函数putenv(),设定我们so文件为LD_PRELOAD设置后新进程启动时将优先加载我们设置

    5K20

    共享对象注入

    程序库可分三类:静态库,共享库和动态加载库 静态库,是在执行程序运行前就已经加入到执行码中,在物理上成为执行程序一部分; 共享库,是在执行程序启动时被加载到执行程序中,这样库可以被多个执行程序共享使用...动态加载库,其实并不是一种真正库类型,应该是一种库使用技术,应用程序可以在运行过程中随时加载和使用库。 ?...这时候我们使用export命令将LD_PRELOAD环境变量指向新创建libc_puts共享库。...LD_PRELOAD环境变量用于指定要由加载程序首先加载共享库,首先加载共享库使我们能够拦截函数调用,并且使用动态加载程序API,我们可以将最初想要puts函数绑定到函数指针,并通过它传递我们能控制参数...当然这是一种利用方式,因为我们创建共享库将被加载到正在运行进程内存空间中,因此我们可以执行诸如转储进程内存以在运行时检查内存或篡改运行时变量之类事情,这将变得更加危险。 ? END

    82730

    linux 链接器 库打桩

    linux 链接器支持库打桩(library interpositioning), 允许我们截获共享库调用,执行自己代码,通过这个机制,可以给程序调试带来很多便利。...以上两种需要有源文件情况下实现,而对于运行时打桩,只需要可以访问执行文件,利用动态链接器LD_PRELOAD环境变量实现。...当加载程序时,解析未定义引用时,动态链接器会先搜索LD_PRELOAD指定库,然后才搜索其他,因此,通过把自己实现动态库设置到这个环境变量,动态链接器加载时搜索该库内有对应实现函数,就会直接使用该函数而不会再搜索其他系统库...stderr); exit(1); } freep(ptr); printf("[debug] free %p\n", ptr); } #endif 编译动态库,然后在运行时设定环境变量即可.../out; unset LD_PRELOAD ## 其他任何可执行程序都可以打桩 export LD_PRELOAD=".

    1.7K30

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

    今天这个漏洞实际上是对老漏洞一次绕过,漏洞原理不是本文重点,我用两段简单文字进行描述: 补丁对用户传入参数进行了黑名单过滤,LD_PRELOAD这类参数不再设置环境变量。...但是我们看老漏洞CVE-2017-17562,当时是将LD_PRELOAD设置成标准输入,即LD_PRELOAD=/proc/self/fd/0。...我们目的是在服务器上上传一个可控内容文件,然后将环境变量LD_PRELOAD设置为这个文件路径,这样来劫持动态链接库。很容易想到另一个方法就是通过上传文件形式来创建文件。...找到包含文件 那么我们如果想要利用这个漏洞,就必须找到可以被包含文件,从上面的测试过程可以发现,临时文件其实已经被写入了,只不过其中文件名包含一个从0开始递增数字,我们需要进行爆破。...设置为不超过16384值,但需要比payload.so文件大小要大个500字节左右,我这里设置为15000 发送这个数据包,就可以成功劫持到LD_PRELOAD: 这里原理其实就是,pyaload.so

    55520

    “偷梁换柱”库打桩机制

    来源:公众号【编程珠玑】 网站:https://www.yanbinghu.com 运行时打桩 前面两种打桩方式,一种需要访问源代码,另外一种至少要访问重定位文件。可运行时打桩没有这么多要求。...运行时打桩可以通过设置LD_PRELOAD环境变量,达到在你加载一个动态库或者解析一个符号时,先从LD_PRELOAD指定目录下库去寻找需要符号,然后再去其他库中寻找。...,由于我们自己打桩函数也叫malloc,因此我们通过运行时链接调用malloc函数,以便获取malloc地址,而不是直接调用。.../main ptr is 0x245c010 实际上,你会发现,在设置了这个环境变量终端下,这个打桩动作对所有程序都生效: $ ls ptr is 0x1f1a040 ptr is 0x1f1a680...比如说,有个程序中checkPass接口用来校验密码,如果这个时候使用另外一个动态库,实现自己checkPass函数,并且设置LD_PRELOAD环境变量,就可以达到跳过密码检查目的。

    1.5K20

    绕过Disable Functions来搞事情

    查看phpinfo发现确实设置了disable_functions: 千辛万苦拿到Shell却变成了一个空壳,你甘心?...利用 LD_PRELOAD 环境变量 原理简述 LD_PRELOAD是Linux系统一个环境变量,它可以影响程序运行链接(Runtime linker),它允许你定义在程序运行前优先加载动态链接库...我们通过环境变量 LD_PRELOAD 劫持系统函数,可以达到不调用 PHP 各种命令执行函数(system()、exec() 等等)仍可执行系统命令目的。...想要利用LD_PRELOAD环境变量绕过disable_functions需要注意以下几点: 能够上传自己.so文件 能够控制LD_PRELOAD环境变量值,比如putenv()函数 因为新进程启动将加载...getuid_shadow.so; 运行 PHP 函数 putenv()(用来配置系统环境变量),设定环境变量 LD_PRELOAD 为 getuid_shadow.so,以便后续启动新进程时优先加载该共享对象

    4.5K40

    如何增强Linux内核中访问控制安全 | 洞见

    LSM(Linux Security Modules) ---- 动态库劫持 Linux上动态库劫持主要是基于LD_PRELOAD环境变量,这个环境变量主要作用是改变动态库加载顺序,让用户有选择载入不同动态库中相同函数...但是使用不当就会引起严重安全问题,我们可以通过它在主程序和动态连接库中加载别的动态函数,这就给我们提供了一个机会,向别人程序注入恶意代码。...\n"); } 我们再写一段hookStrcmp程序,让这个比较永远正确。...这是一个最简单劫持 ,但是如果劫持了类似于geteuid/getuid/getgid,让其返回0,就相当于暴露了root权限。所以为了安全起见,一般将LD_PRELOAD环境变量禁用掉。...动态库劫持不太完全,劫持信息有可能满足不了我们需求,还有可能别人在你之前劫持了,一旦禁用LD_PRELOAD就失效了。

    2.4K10
    领券