-코드 분석


위 코드에 gets 라는 함수가 있는데 이 함수는 크기에 제한 없이 입력을 받고 있는 것을 알 수 가있다. 그래서 buf에 할당 된 크기 이상에 입력을 주게 된다면 버퍼 오버플로우가 진행 될 것으로 예상이 됩니다.
스택 메모리 구조
buf
|
sfp
|
ret
|
136 8 4 0
우리가 여기서 봐야 하는 것은 ret이다. ret은 pop eip와 jmp eip를 수행하는데 다음 수행할 명령을 넣고 eip에 넣고 그 주소로 가서 실행하게 된다. 따라서 버퍼 오버플로우에서 ret에 함수 주소나 쉘 코드를 덮어쓰면 그 함수나 코드가 실행이 될 것입니다.
-exploit

info func을 사용했을 때 read_flag 라는 함수의 주소를 확인 할 수 가 있습니다.

이 코드를 실행을 시키게 된다면 flag 값이 출력이 될 것입니다.
