티스토리 뷰

WarGame/FTZ

[FTZ] Level9 문제 풀이

Turtle1000 2013. 12. 27. 19:18

이번 레벨 부터는 Buffer Overflow 부분이 시작됩니다 !

일단 매번 하는 것 있죠. 고고싱...

좀 길죠...? 하하... 일단 코드 자체만 해석하는 것은 되실거라 믿어 의심치 않습니다... 만 ! 그래도 한 번 해석해보죠.

10바이트를 할당받은 두 개의 변수가 buf2, buf 순서로 선언이 되어있구요.

"It can be overflow : " 를 출력한 뒤 바로 입력을 받고 있습니다. 입력을 완료하면, buf2 변수와 "go" 문자열을 비교해서 맞으면 Level10의 쉘을 띄워줍니다.

그런데 한 가지 이상한 것이 있네요...? buf에 입력을 하는데 왜 buf2에서 "go"를 비교하고 있을까요 ?? 아무것도 모르는 상태에서는 당황할 수 밖에 없습니다.

gdb를 이용해서 한 번 살펴보죠 !

hint의 코드를 복사 붙여넣기로 컴파일 한 후에 gdb로 disassemble한 장면입니다.

맨 처음에 스택프레임을 구성한 후 40(0x28)Bytes 를 할당하는 것을 볼 수 있습니다. 이는 fgets에서 40바이트를 최대로 받고 있기 때문입니다.

또한 코드를 보다보면,

각각의 지역변수는 Dummy 값을 포함하여 16바이트 씩을 할당받고 있다는 것을 알 수 있습니다.

이를 토대로 문제를 풀어보면,

16글자를 입력 후에 "go" 를 입력하니 문제가 풀렸습니다 !

음.... 한 번 메모리 구조나 이런 것들을 설명하는 코너도 필요할 것 같군요...

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

[FTZ] Level11 문제 풀이  (0) 2013.12.31
[FTZ] Level10 문제 풀이  (0) 2013.12.29
[FTZ] Level8 문제 풀이  (0) 2013.12.27
[FTZ] Level7 문제 풀이  (0) 2013.12.26
[FTZ] Level6 문제 풀이  (0) 2013.12.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함