나혼자 공부장

[FTZ] Level 9 풀이 본문

pwnable/FTZ

[FTZ] Level 9 풀이

라부송 2019. 11. 13. 01:45

level 9 hint 파일

언제나처럼 이번 레벨에도 hint 파일이 제공된다. cat hint로 내용을 확인해보면, /usr/bin/bof의 소스를 알려준다.

일단 파일 이름부터 bof 라 버퍼 오버플로우 문제라는걸 짐작할 수 있다.

strncmp 함수를 사용하는 부분의 조건문을 충족시키면 레벨이 통과되는 것을 알았다.

 

buf2 배열의 처음 두 인덱스 값을 합쳐서 "go" 로 만들면 된다.

일단 처음 직관적으로 떠오르는대로 무식하게 시도해보자

 

 

그냥 buf의 크기가 10byte니까 그걸 2byte 만큼 넘겨서 go를 입력해주면 되지 않을까 싶었다.

하지만 너무 쉽게 생각했던듯 하다. 통하지 않았다.

 

 

 

gdb로 어셈블리어를 조회해서 자세히 분석해보고자 했으나 권한이 막혀있어서 그것도 할 수 없다.

이 상태에선 아무것도 할 수 있는게 없으니 같은 소스코드 파일을 하나 더 짜서 그걸 분석하든가 해보자.

 

 

lv9_bof.c

일단 그대로 베낀 파일을 만들었다. 이걸 그대로 gdb에 올려서 하나하나 분석하기 보다는, 그대로 printf 문을 사용해서 buf와 buf2의 주소를 출력해서 보는 것이 더 쉬울 듯하다.

 

 

두 배열 시작 주소의 차를 구하는 printf 문을 하나 추가했다.

 

 

 

두 주소의 차가 출력됐다. 0x10은 10진수로 16을 나타내므로, buf의 끝~buf2의 시작 주소 차이에는 총 6byte의 dummy 공간이 있다는 것을 알아냈다.

 

 

그럼 이제 그 공간을 거치는 길이의 문자열을 입력해서 buf2까지 도달하면 된다.

딱 buf 크기를 거쳐서 6byte 공간을 넘어서는 순간 go를 입력해주면 문제가 해결되겠다.

 

 

 

정답 : "interesting to hack!"

 

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

[FTZ] Level 11 풀이  (0) 2019.11.13
Stack Frame debugging  (0) 2019.10.02
[FTZ] Level 8 풀이  (0) 2019.10.02
Comments