본문 바로가기

* Wargame/F.T.Z

F.T.Z - level9


ftz level9 문제를 풀어보겠습니다.

BOF 문제입니다.


해커스쿨 ftz level9 문제를 먼저보자! 





cat hint 하여 얻은 정보이다.



소스를 자세히 보면 이렇다.


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

main(){

  char buf2[10];                           // char 형 변수 buf2 라는 이름에 10바이트 크기의 배열을 선언
  char buf[10];                             // char 형 변수 buf 라는 이름에 10바이트 크기의 배열을 선언

  printf("It can be overflow : ");      // printf 로 프로그램이 실행되면 "it can be overflow :"라는 문자를 출력
  fgets(buf,40,stdin);                    // 40바이트 이하 크기의 입력을 받아서 buf 에 저장함

  if ( strncmp(buf2, "go", 2) == 0 )  // buf2 의 2바이트와 go와 비교해 봐서 같다면
   {
        printf("Good Skill!\n");         // printf 로 Good skill 을 출력 해주면서
        setreuid( 3010, 3010 );          // 사용자에게 level10 권한을 주고
        system("/bin/bash");            // bash 쉘을 실행시켜 준다

  }

}



여기서 볼 수 있듯이 buf를 초과하여 buf2로 넘어가야한다.



cat /etc/passwd | grep level10 를 치면 level10은 3010:3010 level10권한이 있고 /bin/bash 쉘이라고 한다.




0123456789 까지 10byte이다. 그리고 그 방이 10으로 제한되어있으므로 10이상을 넘어가면 buf2로 넘어간다.

buf2로 넘어갔으면 go와 비교하여 값을 출력하는 노가다를 한다.

0123456789012345go 를 입력하였더니 Good Skill! 이라는 출력문이 뜨면서 level10권한으로 넘어갔다.


이렇게해서 password 획득!



출처 : http://www.cyworld.com/ruo91/2907740

 

'* Wargame > F.T.Z' 카테고리의 다른 글

F.T.Z - Level 1  (0) 2012.08.28
F.T.Z - level8  (0) 2012.07.06
F.T.Z - level7  (0) 2012.07.05
F.T.Z - level6  (2) 2012.07.05