一种简单的hook方法--LD_PRELOAD变量

Posted zlgxzswjy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一种简单的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

[email protected]:/tmp$ ./getuid
my uid is 1014
[email protected]:/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变量

[email protected]:/tmp$ LD_PRELOAD="/tmp/muid.so"
[email protected]:/tmp$ export LD_PRELOAD

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

三、运行getuid程序

[email protected]:/tmp$ ./getuid 
my uid is 1000

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

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





以上是关于一种简单的hook方法--LD_PRELOAD变量的主要内容,如果未能解决你的问题,请参考以下文章

后门技术(HOOK篇)之DT_RPATH

后门技术(HOOK篇)之DT_RPATH

Golang SSH 加载 LD_PRELOAD 和 LD_LIBRARY_PATH 环境变量

UNIX下的LD_PRELOAD环境变量

从LD_PRELOAD探究子进程的环境变量

LD_PRELOAD和ld --wrap