드디어 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 |