본문 바로가기

WARGAME/FTZ [system]

ftz level 9 [level9]

 

 

 

 

 

 

 

level9

 

 

 

 

 

 

드디어 bof 가 나오는 것 같다.

 

buf2[10], buf[10] 을 할당하고,

역시 bof 취약 함수인  fgets 를 이용해서 buf 에 문자열 입력을 받는 것을 볼 수 있다.

 

그리고 system("/bin/bash") 를 실행하는  즉, level10 권한으로 쉘을 여는 부분이 실행되려면, 

buf2 의 맨 앞 두글자가 "go" 여야한다는 걸 알 수 있다.

 

 

 

 

 

 

스택은 아마

buf
buf2
SFP
RET

이런 식으로 생성될 것이다.

 

 

 

 

 

우리는 buf 에 문자열을 입력해서, buf 의 크기인 10 바이트 보다 더 많은 바이트를 입력해,

buf2 의 맨 앞 두글자 자리에 "go" 가 들어가도록 오버플로우 시키면 될 것이다.

 

 

 

 

한번 buf가 10 바이트니까 10글자를 아무거나 입력하고 마지막에 go 를 입력했지만 역시 택도 없었다. 

 

 

 

 

 

 

 

 

 

 

 

정확히 buf 와 buf2 의 주소 차이가 얼마나 나는지 확인을 해야 오버플로우를 정확하게 시킬 수 있기 때문에

/tmp 위치에 hint 에 나온 소스를 vi 로 입력해서 컴파일해주고 gdb 로 디버깅 해보자.

 

들여쓰기는 무시 ㅎㅎ

 

 

 

 

 

 

gcc -o bof bof.c 로 컴파일 후, 보기에 익숙한 인텔 형식으로 변환해준 다음 확인해보면,

 

이렇게 디버깅 결과가 보인다.

 

 

0x084844b <main+43>: lea eax, [ebp-40] 이 아마 buf2 의 주소가 될 것이고,

0x0848461 <main+65>: lea eax, [ebp-24] 가 buf 의 주소가 될 것이다.

 

 

이 둘의 차이는 40-24=16 바이트 이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이제 bof 를 실행해주고, 16바이트를 입력해준 다음 "go" 를 붙여서 입력하면,

 

성공.

 

 

 

 

 

 

 

 

이제 따진 level10 의 쉘을 이용해서 my-pass 를 확인하자.

 

level10 의 password "interesting to hack!" 획득 !

'WARGAME > FTZ [system]' 카테고리의 다른 글

ftz level 11 [level11]  (0) 2020.04.30
ftz level 10 [level10]  (0) 2020.04.30
ftz level 8 [level8]  (0) 2020.04.30
ftz level 7 [level7]  (0) 2020.04.30
ftz level 6 [level6]  (0) 2020.04.29