一種簡單的hook方法--LD_PRELOAD變量

LD_PRELOAD這個變量容許你定義在程序運行時優先加載的動態連接庫,從而在程序運行時的動態連接shell

下面程序的看一個例子-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 1014
level13@nebula:/tmp$ id
uid=1014(level13) gid=1014(level13) groups=1014(level13)

運行後確實拿到了當前用戶的uid,下面就經過LD_PRELOAD變量來劫持系統原來的getuid函數,從而改變返回結果ui

1、編寫惡意getuid()函數spa

//muid.c

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

//gcc -shared -lc -fPIC -o muid.so muid.c

咱們讓惡意getuid函數返回1000這個值code

2、修改LD_PRELOAD變量blog

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

把LD_PRELOAD變量指向咱們編譯好的惡意getuid函數庫get

3、運行getuid程序io

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

能夠看到這裏getuid函數已經被劫持了,返回了咱們想要的uid值,順利hook該函數編譯

咱們也能夠加入更多惡意代碼,好比返彈shell等,通過測試,這種方式能夠劫持大部分系統函數,其餘理由有待深刻挖掘

相關文章
相關標籤/搜索