728x90

확실히 LOS보다 LOB가 재밌는듯

/*
        The Lord of the BOF : The Fellowship of the BOF
        - orge
        - check argv[0]
*/

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

        // here is changed!
        if(strlen(argv[0]) != 77){
                printf("argv[0] 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);
}

 

보아하니, egghunter(이거 계속 막혀서 까먹을듯...egg export=`python~~), bufferhunter, \xbf, argv[1]길이 제한,  argv[0] should 77 등이 있다.

argv[1]의 길이의 제한이 중요한게 아니라 argv[0]의 길이의 제한이 중요한데, 우리가 페이로드를 작성할때 쓰는 [./gremlin] 이 명령어의 길이를 무슨 수로 77자를 맞출까? 

 

첫번째 방법은 심볼릭 링크를 만드는 것이고,

그 명령어는  ln -s [링크를 지정할 파일] [링크이름] 이다.

나도 처음엔 이 방법으로 풀었고, 같은 방법으로 풀면 재미없으니깐 다른 방법을 사용하겠다.

 

우리가 파일을 실행할때 쓰는 명령어는 [./]요건데 [/]이 기호는 디렉토리를 분리해주는 기호고, 안에 값이 없으면 

아무리 적어도 의미없는 기호다. 지금 상황에 딱 필요한 기호지.

 

혹시나 blank, 즉 스페이스바를 기호로 인식한다고 가정하고 시도해봤는데 실패했다 ㅋㅋㅋ

이제 주소가 나왔으니깐 페이로드를 작성하면, (주소가 나온 이유는 LOB 6번 문제처럼 코드를 수정했다)

 

이게 이상한게 봐바

내가 분명히 풀이쓰려고 전에 풀때 쓴 파일 지우기 전에 bash2 해줬는데 에러가 뜨는데 

다시 bash2해주니깐 풀리네 ㅋㅋㅋㅋㅋㅋㅋㅋ

뭐 bash2도 유통기한이 있나? 

728x90

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

LOB 9번  (0) 2020.07.25
LOB 8번  (0) 2020.07.25
LOB 6번  (0) 2020.07.25
LOB 5번  (0) 2020.07.22
LOB 4번  (0) 2020.07.22

+ Recent posts