前言
哦!
更换动态链接库的装载路径
用于设置动态库的路径 export LD_LIBRARY_PATH
这样程序会在该路径下寻找动态链接库,但不会是优先加载的路径
设置export LD_PRELOAD=”./myhack.so” #设置LD_PRELOAD环境变量,库中的同名函数在程序运行时优先调用
可以来做个实验。
实验一
编写test.c
#include<stdio.h>
#include<string.h>
void main() {
char passwd[] = "password";
char str[128];
scanf("%s", &str);
if (!strcmp(passwd, str)) {
printf("correct\n");
return;
}
printf("invalid\n");
}
编写hack.so
#include<stdio.h>
#include<stdio.h>
int strcmp(const char *s1, const char *s2) {
printf("hacked\n");
return 0;
}
编译成动态链接库
gcc -shared -o hack.so hack.c
设置LD_PRELOAD
LD_PRELOAD="./hack.so" ./a.out
然后执行便可以发现,strcmp函数成功被我们劫持了。
实验二
在CTF中我们常常需要加载另外的glibc,所以我们先来尝试直接设置LD_PRELOAD
提示无法加载,23333,不是说好能行的么。
找了好久了原因,是因为ld.so
的问题,我们需要更改
未完待续