본문 바로가기
[ ★ ]Study/War Game

[Toddler's Bottle] pwnable.kr bof

by nroses-taek 2017. 8. 16.

5점짜리 bof 문제이군요. bof에 대해서 공부하고 오세요 !


주소로 들어가서 파일을 다운 받고 C 코드를 보면
핵심은 key == 0xcafababe 되도록 하는 것입니다.
 
func 함수로 인자가 0xdeadbeef 넘어가고 그것이 변수 key 받고 있으므로,
bof 취약점을 이용해 deadbeef cafebabe 바꾸어주면 같습니다.
 
여기서 gets 함수를 보고 빠르게 bof라는 것을 알아채야 되는데…
gets 온전히 user input 관련한 함수이므로 함수를 그대로 사용하면 오버플로우취약점에 노출되게 되는 것이다. 이와 관련해서 strcpy, strcat … 여러 함수들도 취약하다는 것을 알았으면 한다.
 
우선, overflow 변수에 값을 입력하고 메모리를 봅시다.

서브함수인 func 메모리를 열고
브레이크는 어셈블리 명령어 cmp(비교) 부분인 +40부분에 겁니다.
(A 32 만큼 입력해주었습니다.)
 

메모리를 확인해보니 변수의 시작주소와 deadbeef 라는 문자열을 있습니다.
, 저희는 사이 공간이
20바이트를 조금만 채워주고 cafebabe라는 문자열로 바꿔주기만 하면
미션완료입니다. 생각보다 gdb 보고 하니 결과도 빨리 생각해내게 되네요.



댓글