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

如何在LD_PRELOAD库中获取命令行参数

LD_PRELOAD是一个环境变量,用于指定在程序加载时要预加载的共享库。它可以用于修改程序的行为或拦截系统调用。

要在LD_PRELOAD库中获取命令行参数,可以使用以下步骤:

  1. 创建一个共享库源文件,例如preload.c。
  2. 在preload.c中,使用LD_PRELOAD宏定义一个attribute((constructor))函数,该函数将在程序加载时自动调用。
  3. 在该函数中,使用getenv函数获取命令行参数,getenv("ARGV")可以获取到完整的命令行参数字符串。
  4. 对获取到的命令行参数进行解析和处理,可以使用字符串分割函数(如strtok)将参数分割成单个参数。
  5. 可以将解析后的参数存储在全局变量中,以便其他函数使用。

以下是一个示例的preload.c文件的代码:

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

__attribute__((constructor))
void init(void) {
    char* argv = getenv("ARGV");
    if (argv != NULL) {
        // 解析命令行参数
        char* token = strtok(argv, " ");
        while (token != NULL) {
            printf("命令行参数: %s\n", token);
            token = strtok(NULL, " ");
        }
    }
}

编译preload.c文件为共享库:

代码语言:txt
复制
gcc -shared -o preload.so preload.c

使用LD_PRELOAD环境变量加载共享库并运行程序:

代码语言:txt
复制
LD_PRELOAD=./preload.so ./your_program

这样,在程序运行时,preload.so中的init函数将会被调用,并获取并打印命令行参数。

请注意,以上示例仅演示了如何在LD_PRELOAD库中获取命令行参数,实际应用中可能需要根据具体需求进行修改和扩展。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能(AI):https://cloud.tencent.com/product/ai
  • 物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 移动开发(移动推送、移动分析):https://cloud.tencent.com/product/mpns
  • 区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙:https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SpringTask实现数据获取任务、调用方法、方法参数

= 0) { jobs.forEach(job -> { // 获取数据数据 String[] strArgs...,参数:" + a + b); } } 4....用途 将时间跨度较高的任务加到数据表(比如一个月执行一次),由JobService.execute方法,定时扫描数据执行,能够避免服务停止导致的定时任务丢失。...可以将JobService.execute方法的代码抽出,作为其他工具类使用(比如按扫描频度、执行功能等增加多种不同的execute) 本人目前的使用步骤: 在JobService类添加可能的方法...待完善: 如果扫描频度范围内可能多次扫描数据(比如上述方法我设置的是每5秒执行一次扫描,那么在数据表的人物肯定会被多次扫描),那么任务会被重复创建。

88620

无需 sendmail:巧用 LD_PRELOAD 突破 disable_functions

最后,借助环境变量 LD_PRELOAD 劫持系统函数 getuid(),获取控制权。...一是 cmd 参数,待执行的系统命令( pwd);二是 outpath 参数,保存命令执行输出结果的文件路径( /tmp/xx),便于在页面上显示,另外关于该参数,你应注意 web 是否有读写权限、...web 是否可跨目录访问、文件将被覆盖和删除等几点;三是 sopath 参数,指定劫持系统函数的共享对象的绝对路径( /var/www/bypass_disablefunc_x64.so),另外关于该参数...此外,bypass_disablefunc.php 拼接命令和输出路径成为完整的命令行,所以你不用在 cmd 参数重定向了: $evil_cmdline = $cmd . " > " ....从环境变量 EVIL_CMDLINE 接收 bypass_disablefunc.php 传递过来的待执行的命令行

2K10

干货 | Linux下权限维持实战

有趣的 LD_PRELOAD 前言 LD_PRELOAD 是 Linux 系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接...让程序优先加载的这个恶意的动态链接,最后当程序再次运行时便会加载动态链接的恶意函数。...参数:待执行的系统命令, id 命令。...•outpath 参数:保存命令执行输出结果的文件路径( /tmp/xx),便于在页面上显示,另外该参数,你应注意 web 是否有读写权限、web 是否可跨目录访问、文件将被覆盖和删除等几点。...•sopath 参数:指定劫持系统函数的共享对象的绝对路径( /var/www/bypass_disablefunc_x64.so),另外关于该参数,你应注意 web 是否可跨目录访问到它。

1.5K30

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

在我们的插入函数,我们使用dlsym获取原始函数的地址,然后调用它来获取下一个目录条目。...我们将每个条目的名称与“malicious_file”进行比较,如果匹配,则跳过它,从而有效地将该文件从输出隐藏起来。 dlsym允许我们在运行时获取共享对象/函数的地址。...LD_PRELOAD定义的在/etc/ld.so.preload之前加载。在野的利用动态链接器劫持 rootkit 技术已被许多攻击者使用。...Libprocesshider 是一个开源工具,旨在通过覆盖函数来隐藏常用进程列表工具( ps、top 和 lsof)的特定进程。这种技术使TeamTNT能够隐藏XMRig加密和其他恶意进程。...在这篇博文中,我们了解了此 rootkit 的工作原理,并提供了有关如何在操作系统上检测它的最佳实践。

13610

CTFHub:web-LD_PRELOAD-WP

解题思路 思路分析 根据资料可得知有四种绕过 disable_functions 的手法: 攻击后端组件,寻找存在命令注入的 web 应用常用的后端组件,,ImageMagick 的魔图漏洞、bash...大致步骤如下 生成一个我们的恶意动态链接文件 利用putenv设置LD_PRELOAD为我们的恶意动态链接文件的路径 配合php的某个函数去触发我们的恶意动态链接文件 RCE并获取flag 这里面的某个函数需要在运行的时候能够启动子进程...LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接。...这个功能主要就是用来有选择性的载入不同动态链接的相同函数。通过这个环境变量,我们可以在主程序和其动态链接的中间加载别的动态链接,甚至覆盖正常的函数。...参数string 的格式为name=value, 如果该环境变量原先存在, 则变量内容会依参数string 改变, 否则此参数内容会成为新的环境变量.

15810

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

漏洞的起因是cgi.c文件的cgiHandler函数使用了不可信任的HTTP请求参数初始化已fork的CGI脚本的环境。...结合glibc动态链接器,攻击者就可以使用特殊的环境变量(LD_PRELOAD)导致执行任意代码。 安恒信息应急响应中心也将对该漏洞进行持续关注,并第一时间为您更新相关漏洞信息。...可以看出正式这里对于参数的过滤不全,导致了用户可以修改CGI程序的LD_PRELOAD环境变量。 ? 漏洞复现 payload.c ? 将payload.c编译成动态链接.so文件 ?...如果用该文件作为LD_PRELOAD动态链接文件运行,运行任意程序则会有如下效果。 ? 可以看到payload.so的代码成功运行。 验证poc: ?...查看CGI程序的0号fd文件,发现这是一个符号链接,指向一个tmp文件,我们再查看该tmp文件,最终确认该文件正是我们上传的恶意动态链接文件。 ?

1.6K120

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

漏洞的起因是cgi.c文件的cgiHandler函数使用了不可信任的HTTP请求参数初始化已fork的CGI脚本的环境。...结合glibc动态链接器,攻击者就可以使用特殊的环境变量(LD_PRELOAD)导致执行任意代码。 安恒信息应急响应中心也将对该漏洞进行持续关注,并第一时间为您更新相关漏洞信息。...可以看出正式这里对于参数的过滤不全,导致了用户可以修改CGI程序的LD_PRELOAD环境变量。...漏洞复现 payload.c 将payload.c编译成动态链接.so文件 查看编译好的文件 如果用该文件作为LD_PRELOAD动态链接文件运行,运行任意程序则会有如下效果。...查看CGI程序的0号fd文件,发现这是一个符号链接,指向一个tmp文件,我们再查看该tmp文件,最终确认该文件正是我们上传的恶意动态链接文件。

1.1K100

共享对象注入

“如何在不解密的情况下,破解SSL的明文数据?那当然是不要让明文加密了!逻辑鬼才不容反驳” 首先我们得了解一下基础知识 ?...程序可分三类:静态,共享和动态加载 静态,是在执行程序运行前就已经加入到执行码,在物理上成为执行程序的一部分; 共享,是在执行程序启动时被加载到执行程序,这样的可以被多个执行程序共享使用...动态加载,其实并不是一种真正的类型,应该是一种的使用技术,应用程序可以在运行过程随时加载和使用。 ?...这时候我们使用export命令将LD_PRELOAD环境变量指向新创建的libc_puts共享。...LD_PRELOAD环境变量用于指定要由加载程序首先加载的共享,首先加载共享使我们能够拦截函数调用,并且使用动态加载程序API,我们可以将最初想要的puts函数绑定到函数指针,并通过它传递我们能控制的参数

81330

如何修改容器时间而不改变宿主机时间?

需求 有时候需要测试业务程序,把时间指定到一个特定的时间去测试,如何在修改容器时间而不影响宿主机时间? 解决方法 GitHub 有一个开源的 libfaketime 项目,能解决这个问题。...github.com/wolfcw/libfaketime.git # 进入项目 $ cd libfaketime # 编译安装 $ sudo make && sudo make install 使用 指定动态链接使用...="-3d" date Sun Mar 23 21:01:48 CST 2019 # 可以通过设置临时 LD_PRELOAD 环境变量 $ export LD_PRELOAD=/path/to/libfaketime.so....1 # 可以加入到 ~/.bashrc 目录 $ echo "LD_PRELOAD=/path/to/libfaketime.so.1" >> ~/.bashrc # Linux 系统,可以加入到...ld.so.conf 配置 $ echo "/path/to/libfaketime.so.1" >> /etc/ld.so.conf.d/local.conf # 使 local.conf 配置生效

1.7K30

LD_PRELOAD 后门 | bypass disable_functions

LD_PRELOAD 后门 用途 主要是用于绕过 disable_functions ,本质上是加载顺序的问题, 动态链接加载过程中会先加载 LD_PRELOAD 指向的变量,这样我们可以利用这个先加载来进行劫持正常的函数和命令...照常返回正常值(保证命令的正常执行) 漏洞原理 Linux ELF 共享加载顺序: LD_PRELOAD -> /etc/ld.so.preload -> DT_RPATH(编译指定) ->...劫持命令流程 使用readelf -Ws查看命令使用了哪些库函数, 选取一个函数劫持,再使用strace查看函数的参数写劫持函数, 我们在这里使用命令经常用到的字符串比较函数strcmp() 同时可以看到...的,无法用 :LD_PRELOAD 劫持 获取命令的源码 git clone git://git.sv.gnu.org/coreutils man 可以获得命令的详细使用方法 并不是只要命令使用到劫持函数就会运行...(否则参数类型对不上的话不会执行我们重写的hook函数) strace -f php function.php 2>&1 | grep -A2 -B2 execve #查看php文件执行后调用了哪些系统命令

82340

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

LD_LIBRARY_PATH 动态链接目录:在搜索动态时,UNIX 系统会在由该环境变量提供的特定目录搜索。...防护应用可以使用可信静态链接来避免它。 在 Windows 的机制,加载 DLL 时,通常在搜索系统目录之前,在当前目录搜索 DLL。...LD_PRELOAD 许多 UNIX 系统允许你预加载共享,通过设置环境变量LD_PRELOAD。这允许你做一些有趣的事情,比如将 C 标准的函数或者甚至系统调用的 C 接口换成你自己的函数。...要注意 Shell 是个强大的程序)处理命令行参数。 启动子进程涉及到依赖和属性继承的问题,我们已经看到它们存在问题。函数execlp和execvp使用 Shell 来启动程序。...一些应用从 Web 表单获取用户输入,之后使用用户输入直接构造 SQL 语句。

56710

F-Stack LD_PRELOAD 测试版介绍

libff_syscall.so 该动态主要作用是劫持系统的 socket 相关接口,根据 fd 参数判断是调用 F-Stack的相关接口(通过上下文 sc 与 fsack 实例应用程序交互)还是系统内核的相关接口...F-Stack用户的应用程序 ( helloworl 或 Nginx)设置 LD_PRELOAD劫持系统的 socket 相关 API 时使用,即可直接接入 F-Stack 开发框架,可以参考如下命令...Nginx 接入libff_syscall.so介绍 Nginx(以 F-Stack 默认携带的 Nginx-1.16.1 为例)目前可以不修改任何代码直接以LD_PRELOAD动态libff_syscall.so...export FF_INITIAL_LCORE_ID=0x4 如果用于应用程序可以配置 CPU 亲和性,则可以忽略该参数 Nginx 配置文件的worker_cpu_affinity参数。...export FF_PROC_ID=1 如果用于应用程序可以配置 CPU 亲和性,则可以忽略该参数 Nginx 配置文件的worker_cpu_affinity参数

79730

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

https://www.freebuf.com/column/162604.html linux 操作系统的动态链接在加载过程,动态链接器会先读取 LDPRELOAD 环境变量和默认配置文件 /etc.../ld.so.preload,并将读取到的动态链接文件进行预加载,即使程序不依赖这些动态链接,LDPRELOAD 环境变量和 /etc/ld.so.preload 配置文件中指定的动态链接依然会被装载...LD_PRELOAD 通过检测 $LD_PRELOAD 是否有值。...此时子进程标准输入输出已被重定向到套接字,getpeername 能真的获取到客户端的 TCP 源端口,如果是 19526 就执行 sh 给个 shell。...通过软连接的方式,实质上 PAM 认证是通过软连接的文件名(: /tmp/su,/home/su) 在 /etc/pam.d/ 目录下寻找对应的 PAM 配置文件(: /etc/pam.d/su),

8.9K50

【Android 逆向】修改运行的 Android 进程的内存数据 ( Android 命令行获取要调试的应用进程的 PID | 进程注入调试进程内存的 so )

文章目录 一、Android 命令行获取要调试的应用进程的 PID 二、进程注入调试进程内存的 so 一、Android 命令行获取要调试的应用进程的 PID ---- 前置博客 【Android...逆向】修改运行的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态到 /data/system ) 先安装 Android...PID 为 2328 ; 二、进程注入调试进程内存的 so ---- 在 【Android 逆向】修改运行的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝...Android 平台可执行文件和动态到 /data/system ) 博客 , 拷贝了 2 个文件到 /data/system/debug/ 目录下 , 先为两个文件赋予 777 权限 , 即所有的执行权限.../tool 2328 命令 , 即可完成 进程 注入操作 ; 如果命令行输出的 hook_entry_addr = 0xa36044e0 不为空 , 是一个实际的地址 , 说明调试动态注入成功 ; 完整命令行输出

69410

RASP攻防 —— RASP安全应用与局限性浅析

image (5) 下午7.56.55.png 替换 Opcode handler 后便可以自定义函数调用前后的操作, 获取参数、阻断攻击等, 还可以通过 ZEND_USER_OPCODE_DISPATCH...参数获取与分析 在完成对敏感函数调用行为的监控后,通过ZEND_CALL_NUM_ARGS和ZEND_CALL_ARG,我们可以获取到函数的参数个数和内容,便可根据函数的参数制定相应的策略。...文件类可以关注是否读取了敏感文件, 数据操作类是否语法结构发生了变化等等。 二、 RASP 安全应用场景介绍 1....比如 mail() 函数的第五个additional_parameters参数可用于设置命令行选项传递给配置为发送邮件时使用的程序。...LD_PRELOAD LD_PRELOAD 是Linux中比较特殊的环境变量,它允许用户指定程序运行前优先加载的动态链接

1.8K30

TryHackMe之Linux提权

hostname hostname命令可以获取目标机的主机名,虽然这个值可以很容易地改变或者是一个相对无意义的字符串,但在某些时候它可以提供有关目标系统在公司网络的角色的信息 uname -a 这个命令将为我们提供有关系统使用的内核的更多详细信息...命令的输出内容通常包括以下内容: PID:进程ID(进程唯一) TTY:用户使用的终端类型 时间:进程使用的 CPU 时间量(这不是该进程运行的时间) CMD:正在运行的命令或可执行文件(不会显示任何命令行参数...) -A选项可以查看所有运行的进程;axjs选项可以查看进程树;aux选项可以查看所有用户的进程、启动进程的用户和未附加到终端的进程,使用这个选项我们可以更好地了解系统和潜在的漏洞 env 这个命令可以获取到系统的环境变量...LD_PRELOAD 是一个允许任何程序使用共享的函数。...如果启用env_keep选项,我们可以生成一个共享,它将在程序运行之前加载并执行,注意如果真实用户 ID 与有效用户 ID 不同,LD_PRELOAD 选项将被忽略 这种方法提权的步骤如下: 检查 LD_PRELOAD

1.2K30
领券