LD_RPELOAD环境变量

news2025/1/18 0:41:49

目录

LD_RPELOAD环境变量

LD_RPELOAD

定义

程序的连接方式

 Linux规定动态链接库的文件名规则如下

动态链接库的搜索路径搜索的先后顺序

LD_RPELOAD的劫持

demo

1.定义一个hook.c文件

2.将所写的hook.c 文件编译为动态链接库hook.so

3.劫持检测,查看LD_PRELOAD变量是否存在内容,如果有的话则需检查对应的.so文件

4.利用编译好的hook.so文件,进行逆行设置

5.进行测试

弊端


LD_RPELOAD环境变量

LD_RPELOAD

定义

        LD_RPELOAD是Linux/Unix系统的一个环境变量,它影响程序的运行时的链接(Runtime linker),它允许在程序运行前定义优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库

程序的连接方式

  • 静态链接 --- 在程序运行之前先将各个目标模块以及所需要的库函数链接成一个完整的可执行程序,之后不再拆开

  • 装入时动态链接 --- 源程序编译后所得到的一组目标模块,在装入内存时,边装入边链接

  • 运行时动态链接 --- 原程序编译后得到的目标模块,在程序执行过程中需要用到时才对它进行链接

注意:

        静态链接库 --- 在Linux下文件名后缀为.a,如libstdc++.a。在编译链接时直接将目标代码加入可执行程序

        动态链接库 --- 在Linux下是.so文件,在编译链接时只需要记录需要链接的号,运行程序时才会进行真正的“链接”,所以称为“动态链接”。如果同一台机器上有多个服务使用同一个动态链接库,则只需要加载一份到内存中共享。因此, 动态链接库也称共享库 或者共享对象

 Linux规定动态链接库的文件名规则如下

libname.so.x.y.z

解析

  1. lib --- 统一前缀。
  2. so --- 统一后缀。
  3. name --- 库名,如libstdc++.so.6.0.21的name就是stdc++。
  4. x --- 主版本号 。表示库有重大升级,不同主版本号的库之间是不兼容的。如libstdc++.so.6.0.21的主版本号是6。
  5. y --- 次版本号 。表示库的增量升级,如增加一些新的接口。在主版本号相同的情况下, 高的次版本号向后兼容低的次版本号 。如libstdc++.so.6.0.21的次版本号是0。
  6. z --- 发布版本号 。表示库的优化、bugfix等。相同的主次版本号,不同的发布版本号的库之间 完全兼容 。如libstdc++.so.6.0.21的发布版本号是21。

动态链接库的搜索路径搜索的先后顺序

  1. 编译目标代码时指定的动态库搜索路径(可指定多个搜索路径,按照先后顺序依次搜索)

  2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径(可指定多个搜索路径,按照先后顺序依次搜索)

  3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径(可指定多个搜索路径,按照先后顺序依次搜索)

  4. 默认的动态库搜索路径/lib

  5. 默认的动态库搜索路径/usr/lib

        LD_RPELOAD(not LD_RPELOAD_PATH) 是要在任何其他库之前加载的特定库 (files) 的列表,无论程序是否需要。LD_RPELOAD_PATH是在加载无论如何都会加载的库时要搜索的目录列表 在 linux 上,您可以阅读man ld.so有关这些和其他影响动态链接器的环境变量的更多信息

        这里 LD_PRELOAD 甚至超脱于动态链接库的搜索路径先后顺序之外,它可以指定在程序运行前优先加载的动态链接库

LD_RPELOAD的劫持

        LD_PRELOAD 实际上也是一种代码注入,只是注入的方式和普遍的 Web 端注入的方式不同

demo

        我们重写程序运行过程中所调用的函数将其编译为动态链接库文件,然后通过我们对环境变量的控制来让程序优先加载这里的恶意的动态链接库,进而实现我们在动态链接库中所写的恶意函数

具体操作步骤:

  1. 定义一个函数,函数的名称、变量及变量类型、返回值及返回值类型都要与要替换的函数完全一致。这就要求我们在写动态链接库之前要先去翻看一下对应手册等。

  2. 所写的 c 文件编译为动态链接库

  3. 对 LD_PRELOAD 及逆行设置,值为库文件路径,接下来就可以实现对目标函数原功能的劫持了

  4. 结束攻击,使用命令 unset LD_PRELOAD 即可

1.定义一个hook.c文件

vim hook.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void payload(){
     printf("hack is ok!");
}

int strncmp(const char*__s1, const char*__s2, size_t __n){
if(getenv("LD_PRELOAD") == NULL){
return 0;
}
unsetenv("LD_PRELOAD");
payload();
}

2.将所写的hook.c 文件编译为动态链接库hook.so

gcc -shared -fPIC hook.c -o hook.so //编译成.so文件

3.劫持检测,查看LD_PRELOAD变量是否存在内容,如果有的话则需检查对应的.so文件

 echo $LD_PRELOAD

4.利用编译好的hook.so文件,进行逆行设置

export LD_PRELOAD=$PWD/hook.so

5.进行测试

弊端

        直接改写正常调用的库函数,会导致一些正常命令崩溃

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/896303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

于vue3+vite+element pro + pnpm开源项目

河码桌面是一个基于vue3viteelement pro pnpm 创建的monorepo项目&#xff0c;项目采用的是类操作系统的web界面&#xff0c;操作起来简单又方便&#xff0c;符合用户习惯&#xff0c;又没有操作系统的复杂&#xff01; 有两个两个分支&#xff0c;一个是web版本&#xff0c;…

DDD诊所——聚合过大综合症

“DDD诊所”是Thoughtworks DDD社区的一项活动&#xff0c;通过对同事们在实施DDD过程中遇到的问题进行分析和解答&#xff0c;共同提高开发水平。我们将其中一些典型案例整理成文供大家参考。之后也会考虑在适当的时候将这一形式对外部开放。 就诊日期&#xff1a;2022年6月8…

基于SpringBoot的在线视频教育平台的设计与实现【附ppt|开题|万字文档(LW)和搭建文档】

主要功能 前台界面&#xff1a; ①首页、课程信息推荐、课程信息展示、查看更多等 ②课程信息类型、课程名称、关键词、教师姓名等 ③添加购物车、立即购买、评论、点我收藏、视频播放等 ④个人中心、我的订单、我的地址、我的收藏、客服等 后台登录&#xff1a; ①首页、个人…

BERT、ERNIE、Grover、XLNet、GPT、MASS、UniLM、ELECTRA、RoBERTa、T5、C4

BERT、ERNIE、Grover、XLNet、GPT、MASS、UniLM、ELECTRA、RoBERTa、T5、C4 ELMOBERTERNIE![在这里插入图片描述](https://img-blog.csdnimg.cn/274e31d0f8274c748d05abe2ec65fc73.png)GroverXLNetGPTMASSUniLMELECTRARoBERTaT5C4ELMO BERT

小航助学GESP_C++一级模拟测试卷第3套(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

Spring中的IOC与DI-细胞内物质与传递

对IOC的认识 Spring Inversion of Control简称Spring IOC&#xff0c;是一种设计原则&#xff0c;通过它可以实现对象之间的解耦。通过Spring DI(Dependency Injection)依赖注入实现对象生命周期管理&#xff0c;为开发者提供对象创建、使用方式。 Spring中的Bean 在Spring框…

Ubuntu安装最新版neovim

Ubuntu安装最新版neovim 一、前言 对于neovim版本很重要&#xff0c;有很多插件几乎都要要求neovim版本在0.8或者0.9。但是有一个很严重的问题就是&#xff0c;Ubuntu使用sudo apt install neovim的版本很低达不到要求&#xff08;写文章时是0.7&#xff09; 二、解决方法 …

类的加载过程和反射以及注解

类的加载过程 三个阶段&#xff1a;加载-链接-初始化&#xff0c; 类的初始化只会执行1次。 加载 把字节码文件以流的形式加载到jvm中 链接 验证&#xff1a;验证字节码的合法性等以保证jvm的安全准备&#xff1a;为静态变量赋予初始值&#xff0c;为静态常量赋予有效值。…

【FusionInsight 问题】FusionInsight HD 6.5.1 集群中遇到的问题(01)

FusionInsight HD 6.5.1 集群中遇到的问题&#xff08;01&#xff09; FusionInsight HD 6.5.1 集群中遇到的问题&#xff08;01&#xff09;Spark-on-HBase认证问题Failed to find any Kerberos tgt服务端配置修改客户端配置修改 Spark-on-HBase依赖包问题phoenix-core-4.13.1…

2023年CRM系统排行榜

很多企业想要选择一款CRM系统来进行管理&#xff0c;提高效率。那么&#xff0c;2023年国内有哪些优秀的CRM系统呢&#xff1f;这里有一份2023最新国内crm系统排名&#xff0c;希望可以帮助到正在选型的您。 1、Zoho CRM Zoho CRM是一款知名的SaaS云端CRM系统&#xff0c;拥有…

使用 OpenTelemetry 构建可观测性 02 - 埋点

这是讲解 OpenTelemetry 系列博客的第二篇。在上一篇博客中&#xff0c;我们介绍了 OpenTelemetry 是什么以及由什么组成。现在我们将讨论如何使用 OTel 准确收集遥测数据和链路追踪数据。 手动埋点 我们这里谈论“埋点”(代码插桩)&#xff0c;是指通过技术手段采集链路追踪…

网络协议详解之BGP

目录 BGP&#xff08;边界网关路由协议&#xff09; 一、基础知识囊括&#xff1a; 1.1 IGP协议追求&#xff1a; 1.2 EGP协议的追求&#xff1a; 二、BGP特点&#xff1a; 2.1 BGP数据包 2.2 BGP的工作过程 2.3 结构突变** 2.4 名词解析 2.5 BGP的路由黑洞问题 2.6 …

Plecs电力电子仿真专业教程-第一季 第四节 C语言脚本模块介绍

Plecs电力电子仿真专业教程-第一季 目录 第一章 Plecs是什么 第二节 Plecs 的功能介绍 第三节 Plecs界面介绍 补充课程 Plecs的安装教程与软件下载 第四节 Plecs C语言脚本模块介绍 鉴于很多学习的小伙伴私信我要安装软件&#xff0c;特此添加如下链接&#xff1a; Plecs4.6…

我记不住的Linux那些时间及区别

背景&#xff1a;总是搞不明白Linux系统中这些相关的时间及区别&#xff0c;通过查看网上的资料发现很多都是人云亦云&#xff0c;没有任何新意&#xff0c;所以这里根据自己的试验及资料&#xff0c;再次总结一下&#xff0c;在这里记录一下。 一、介绍 标准的POSIX文件有三…

spring如何进行依赖注入,通过set方法把Dao注入到serves

1、选择Generate右键鼠标 你在service层后面方法的这些: 2、UserService配置文件的写法是怎样的&#xff1a; 3、我们在UserController中执行一下具体写法&#xff1a; 最后我们执行一下 &#xff1a; 4、这里可能出现空指针&#xff0c;因为你当前web层,因为你new这个对象根…

计算机竞赛 医学大数据分析 - 心血管疾病分析

文章目录 1 前言1 课题背景2 数据处理3 数据可视化4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的心血管疾病分析 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9…

神经网络为什么可以学习

本资料转载于B站up主&#xff1a;大模型成长之路,仅用于学习和讨论&#xff0c;如有侵权请联系 动画解析神经网络为什么可以学习_哔哩哔哩_bilibilis 1、一个神经网络是由很多神经元形成的 1.1 也可以是一层&#xff0c;也可以是多层 2 层和层之间的连接就跟一张网一样 2.1 每…

AutoCompany模型的概念设计,涵盖了AI智能公司的各个角色

AutoCompany模型的概念设计&#xff0c;涵盖了AI智能公司的各个角色 自动化企业概念设计与设想&#xff0c;文本将介绍AutoCompany模型的概念设计&#xff0c;涵盖了AI智能公司的各个角色&#xff0c;并结合了GPT-4接口来实现各个角色的功能&#xff0c;设置中央控制器&#xf…

【Redis】Redis哨兵模式

【Redis】Redis哨兵模式 Redis主从模式当主服务器宕机后&#xff0c;需要手动把一台从服务器切换为主服务器&#xff0c;需要人工干预费事费力&#xff0c;为了解决这个问题出现了哨兵模式。 哨兵模式是是一个管理多个 Redis 实例的工具&#xff0c;它可以实现对 Redis 的监控…