ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [HackerSchool] Level9
    오래된/HackerSchool 2011. 4. 28. 01:07

    [level9@ftz level9]$ cat hint

    다음은 /usr/bin/bof의 소스이다.

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
     
    main(){
     
      char buf2[10];
      char buf[10];
     
      printf("It can be overflow : ");
      fgets(buf,40,stdin);
     
      if ( strncmp(buf2, "go", 2) == 0 )
      {
            printf("Good Skill!\n");
            setreuid( 3010, 3010 );
            system("/bin/bash");
       }
     
    }  

    이를 이용하여 level10의 권한을 얻어라.

    [ level9 hint ]

    bufferoverflow 공격을 이해하기 위한 문제이다.

    1. Buffer Overflow

    buffer overflow 는 말 그대로 Buffer 가 넘쳐 흐르는 것이다. 여기서 말하는 Buffer 는 문자열이 저장되는 메모리 공간을 의미 한다.

    그럼 무엇이 문제인지 확인해 보겠다.

      char buf2[10];
      char buf[10];
     
      printf("It can be overflow : ");
      fgets(buf,40,stdin);
     
      if ( strncmp(buf2, "go", 2) == 0 )

    buf 에서 할당한 메모리 공간은 10 byte 밖에 되지 않는데, fgets 함수를 이용해서 buf 배열에 40 byte 를 채우고 있다.
    이렇게 되면 10 byte 는 buf 메모리 공간에 채워지고 나머지 30 byte 는 그대로 그 이후 메모리 공간에 채워지게 된다.
    만약 그 영역이 buf2 배열 메모리 공간이라고 할지라도.

    #include <stdio.h>

    int main(void)
    {
            char buf2[10];
            char buf[10];

            fgets(buf, 40, stdin);

            printf("buf2 : %s\n", buf2);
    }


    [level9@ftz tmp]$ gcc -o test test.c
    [level9@ftz tmp]$ ./test
    AAAAAAAAAAAAAAAAAAAA
    buf2 : AAAA

    비슷한 프로그램을 만들어 간단히 테스트 해보면 buf 에 입력된 값이 buf2 로 넘쳐 흘러 들어감을 확인해 볼 수 있다.
    그런데, 문자는 20 개를 넣었는데 buf2 에는 4개의 문자만 출력되었다. 계산대로라면 buf 에 10개 buf2 에 10개가 들어가야 하는데 말이다.

    첫 번째, 컴파일러는 1 byte 의 메모리 공간을 요청했다고 할지라도 4 byte 공간( 4의 배수 )을 요청 하도록 기계어 코드를 작성한다.

    두 번째, 너무 buffer overflow 공격이 많아지고 exploit code 들이 넘쳐남에 따라 컴파일러에서 임시방편으로 각 buffer 사이에 dummy 영역을 넣도록 했다. 처음에는 4 byte를 넣도록 했고, 이후에는 랜덤한듯한(?) 크기로 넣는데, bof 프로그램의 경우 4 byte 의 dummy 영역이 존재한다.

    결국 buf 와 buf2 사이의 거리는 16 byte 이고, 우리가 입력한 20 byte 중 12 byte는 buf 에 4 byte 는 dummy 영역에 그리고 남은 4 byte 만 buf2 에 들어가게 된 것이다.

    '오래된 > HackerSchool' 카테고리의 다른 글

    [HackerSchool] Level11  (0) 2011.04.29
    [HackerSchool] Level10  (0) 2011.04.29
    [HackerSchool] Level8  (0) 2011.04.27
    [HackerSchool] Level7  (0) 2011.04.27
    [HackerSchool] Level6  (0) 2011.04.27

    댓글

Designed by Tistory.