FTZ level9

2022. 2. 25. 01:22Site/FTZ

이번시간에는 level9에 대하여 풀어보겠습니다

공부를 하는 입장이니 틀린게 있어도 양해부탁드리겠습니다


cat hint를 통해서 hint파일을 확인해 보았습니다

 

*

main(){

  1. char buf2[10]; // char형 buf2 10바이트 할당
  2. char buf[10]; // char형 buf 10바이트 할당

  3. printf("It can be overflow : "); //문자출력
  4. fgets(buf,40,stdin); //stdin을 통해 40바이트 크기의 입력받은 값을 buf에 넣어라

  5. if ( strncmp(buf2, "go", 2) == 0 ) // buf2의 첫두글자 go이면 [strncmp에서 일치하면 0을 반환]
   {
  6.      printf("Good Skill!\n"); //문자출력
  7.      setreuid( 3010, 3010 ); //level10권한획득
  8.      system("/bin/bash"); //쉘 실행
   }
}

*

여기서 4번에서 버퍼오버플로우가 발생합니다

buf는 10바이트 할당받았는데 buf에 40바이트가 들어가는 값이 생기면 저장공간에 부족하여

다른 메모리상에 나머지가 저장될것 같은데요

 

*

버퍼오버플로우 : 데이터를 저장하는 버퍼의 정해진 양을 넘어서서 다른 메모리 공간까지 침범하는 현상 

*

 

일단 핵심은 5번 같습니다. buf2의 앞2문자가 go기만 하면 level10의 권한을 획득할 수 있기때문이죠

그래서 어떻게든지 buf2앞에 go만 들어가면 되니 모든 문자를 go로 입력하여 버퍼오버플로우를 발생시켰습니다

cf) 다른 풀이법들을 보니 gdb를 이용해서 풀었는데 이부분은 추가로 공부해서 적용해서 풀어봐야될것같습니다

 

다음시간에는 level10에 대하여 다루어보겠습니다...

'Site > FTZ' 카테고리의 다른 글

FTZ level11  (0) 2022.03.04
FTZ level10  (0) 2022.02.25
FTZ level8  (0) 2022.02.24
FTZ level7  (0) 2022.02.24
FTZ level6  (0) 2022.02.24