이번엔 그 유명한 buffer overflow를 사용하는 문제...인가보다
내가 bof를 하다니
소스부터 보자
0xdeadbeef로 준 parameter가 0xcafebabe이면 flag를 준다고 한다.
그리고 대놓고 overflow하라고 gets함수에 표시를 해 주었다.
친절하게 알려주었으니 한번 해보자.
우선 func함수에선 길이 32의 char배열 하나만 선언했다.
이 부분을 assembly코드로 확인해보자
call 명령어에 함수를 <func+25> 이렇게 사용하지만 call을 호출한 순서로 보아 <func+36>은 gets인걸 알 수 있다.
그럼 mov로 받은 [ebp-0x2c]는 변수 overflowme이다.
이 함수는 overflowme로 선언한 32byte 외에도 dummy값으로 12byte를 ebp로부터 선언했다.
따라서 gets를 사용해 덮어써야 하는 buffer의 크기는 32(overflowme)+12(dummy) + 4(sfp) + 4(ret)
총 52byte이다.
즉 52byte를 덮어쓴 뒤 0xcafebabe를 입력해주면 flag를 확인할 수 있다.
( 함수의 stack구조는 다음에 알아보자 )
이론상 되는게 맞지만 막상 진짜 되니까 진짜 신기하다.