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 |