-위 코드는 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

+ Recent posts