LD_PRELOAD这个变量允许你定义在程序运行时优先加载的动态链接库,从而在程序运行时的动态链接

下面程序的看一个例子-getuid.c

//getuid.c

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(void)
{
printf("my uid is %d\n",getuid());
} //gcc -o getuid getuid.c

这段程序很简单,就是获取当前的uid

level13@nebula:/tmp$ ./getuid
my uid is
level13@nebula:/tmp$ id
uid=(level13) gid=(level13) groups=(level13)

运行后确实拿到了当前用户的uid,下面就通过LD_PRELOAD变量来劫持系统原来的getuid函数,从而改变返回结果

一、编写恶意getuid()函数

//muid.c

#include<sys/types.h>
uid_t getuid(void)
{
return ;
} //gcc -shared -lc -fPIC -o muid.so muid.c

我们让恶意getuid函数返回1000这个值

二、修改LD_PRELOAD变量

level13@nebula:/tmp$ LD_PRELOAD="/tmp/muid.so"
level13@nebula:/tmp$ export LD_PRELOAD

把LD_PRELOAD变量指向我们编译好的恶意getuid函数库

三、运行getuid程序

level13@nebula:/tmp$ ./getuid
my uid is

可以看到这里getuid函数已经被劫持了,返回了我们想要的uid值,顺利hook该函数

我们也可以加入更多恶意代码,比如返弹shell等,经过测试,这种方式可以劫持大部分系统函数,其他理由有待深入挖掘

一种简单的hook方法--LD_PRELOAD变量的更多相关文章

  1. Honeywords项目——检查密码是否被破解的一种简单方法

    Honeywords项目使用一种简单的方法来改进hash后的密码的安全性——为每个账户维护一个额外的honeywords(假密码).如果有黑客拿到了密码的文件,然后试图用brute froce的方式破 ...

  2. 使用strace工具故障排查的5种简单方法

    使用strace工具故障排查的5种简单方法 本文源自5 simple ways to troubleshoot using strace strace 是一个非常简单的工具,用来跟踪可执行程序的系统调 ...

  3. C语言复制文件的两种简单的方法【从根本解决问题】

    网上的方法大致有这样几种: 1.使用操作系统提供的复制文件的API 2.使用C语言本身提供的复制文件的函数 3.直接读写文件,从文件角度来操作,从而直接将一个文件复制 这里我们使用的就是这第三种. 复 ...

  4. WPF编程 ,TextBlock 显示百分数值的一种简单方法。

    原文:WPF编程 ,TextBlock 显示百分数值的一种简单方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/ ...

  5. [ 原创 ]学习笔记-三种向ListView中填充简单文本的方法

    Android 中ListView是很重要的一块内容 掌握ListView的基本用法 对学习安卓起着举足轻重的作用 今天就介绍一下三种向ListView 填充简单文本的方法 填充其他数据类型的用法之后 ...

  6. 三种简单的html网页自动跳转方法

    三种简单的html网页自动跳转方法,可以让你在打开一个html网页时自动跳转到其它的页面. 方法/步骤   <html> <head> <title>正在跳转< ...

  7. 一种简单快速的模板解析方法,活用with javascript版

    //一种简单快速的模板解析方法,活用with var parseTpl = function( str, data ) { var tmpl = 'var __p=[];' + 'with(obj|| ...

  8. CSS里总算是有了一种简单的垂直居中布局的方法了

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. 【页面传值6种方式】- 【JSP 页面传值方法总结:4种】 - 【跨页面传值的几种简单方式3种】

    阅读目录 1. URL 链接后追加参数 2. Form 3. 设置 Cookie 4. 设置 Session JSP 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧. 试着将各种方式总 ...

随机推荐

  1. ns-3 NetAnim遇到了一个问题

    安装好了 NetAnim 之后,使用NS3原有例子 third.cc ,在 Simulator::run() 前面添加如下语句: AnimationInterface anim("third ...

  2. Robot framework(RF)学习基础

    1.框架特点 2.安装 3.基本内容 RF框架是通用的测试框架,一直由诺西网络维护. 易于使用 采用表格法 可以使用关键字驱动,数据驱动和行为驱动开发完成.(keyword-driven,data-d ...

  3. # WinForm关闭窗体确认

    private void Lba_IE_Form_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show(&q ...

  4. springboot全局配置文件可设置的属性

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...

  5. 什么是分布式锁?Redis实现分布式锁详解

    在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务.分布式锁等.那具体什么是分布式锁,分布式锁应用在哪些业务场景.如何来实现分布式锁呢?今天继续由陈睿|mikeche ...

  6. 【Golang】Debug :decoding dwarf section info at offset 0x0: too short

    解决方法 通过下面的方式升级dlv 来解决这个问题: go get -u github.com/derekparker/delve/cmd/dlv 下面是我记录的定位问题的过程 问题描述 博主升级到了 ...

  7. Map<K, V> 中k,v如果为null就转换

    Set<String> set = map.keySet(); if(set != null && !set.isEmpty()) { for(String key : s ...

  8. POJ - 2528 Mayor's posters(dfs+分治)

    POJ - 2528 Mayor's posters 思路:分治思想. 代码: #include<iostream> #include<cstdio> #include< ...

  9. Python -- Scrapy 框架简单介绍(Scrapy 安装及项目创建)

    Python -- Scrapy 框架简单介绍 最近在学习python 爬虫,先后了解学习urllib.urllib2.requests等,后来发现爬虫也有很多框架,而推荐学习最多就是Scrapy框架 ...

  10. mysql 问题 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdb

    异常错误:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.c ...