-위 코드는 buffer, buffer이후 메모리를 모두 초기화 하는 것을 확인할 수 있다.
이때 사용하는 방식이 함수 후킹이다
1.함수 후킹(hooking)
현재 아이디
[skeleton@localhost skeleton]$ id
uid=510(skeleton) gid=510(skeleton) groups=510(skeleton)
hook.c
#include <stdio.h>
int main()
{
int uid;
int euid;
uid = getuid();
euid= geteuid();
printf("uid:%d, euid:%d\n",uid,euid);
return 0;
}
man 2 geteuid
SYNOPSIS
#include <unistd.h>
#include <sys/types.h>
uid_t getuid(void);
uid_t geteuid(void);
라이브러리 형태로 만들어 줘야한다
#include <unistd.h>
#include <sys/types.h>
uid_t geteuid(void)
{
return 520;
}
[skeleton@localhost skeleton]$ gcc -o hook.so -fPIC --shared hook1.c
[skeleton@localhost skeleton]$ ls
golem golem.c hook hook.c hook1.c hook1.so
[skeleton@localhost skeleton]$ export LD_PRELOAD=/home/skeleton/hook1.so
환경 변수를 올릴때는 무조건 절대경로를 이용해야한다.
[skeleton@localhost skeleton]$ my-pass
euid = 520
got the life
후킹을 하고자 하는 함수를 만들어 놓고 LD_PRELOAD에 올려 놓으면 다른 함수보다 먼저 참조가
되기 때문에 내가 원하는 값을 가지고 올 수 있다.
1. 우선 so파일을 아무거나 하나 생성한다 hook.so <-이유는 LD_PRELOAD 에는 so파일 만 올라갈수 있기 때문에 so를 만들어야한다.
2. so파일이 만들어지면 cp를 이용해서 파일 이름을 쉘코드가 들어간 이름으로 바꿔준다
3. 그리고 export를 통해서 LD_PRELOAD에 쉘코드가 들이간 이름을 올려준다.
4. gdb로 $ebp-3000정도로 LD_PRELOAD 위치를 찾아서 올려준다!
값이 떨어진걸 확인할 수 있다.
'WARGAME > BOF' 카테고리의 다른 글
[BOF] Giant->assassin (0) | 2018.02.20 |
---|---|
[BOF] golem->darkknight (0) | 2018.02.20 |
[BOF] vampire->skeleton (0) | 2018.02.20 |
[BOF] orge->vampire (0) | 2018.02.20 |
[BOF] orge->troll (0) | 2018.02.20 |