bof문제인데 이전 문제들이랑은 푸는 방법이다르더라구요
이번엔 우분투에서 풀어보았습니다
자먼저 Download에있는 링크를 통해서 파일 두개 다운받아주시고
bof.c먼저 살펴보겠습니다
코드를 딱 봤을때는 쉽다라고 느껴졋는데
아니더라구요 우선은 key값이랑 0xcafebabe가 같아야하는데 애초에 틀려먹었죠
그럼 어떻게하느냐 찾아본결과 gets함수가 받을 문자수를 지정하지않아서 버퍼오버플로우가 나타난다고 합니다
버퍼오버플로우가 무엇이냐
https://namu.wiki/w/%EB%B2%84%ED%8D%BC%20%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C
위에 나무위키에서 한번 읽어보면 될듯합니다
자그럼 gets 함수를 이용해서 key값을 0xcafebabe로 바꾸어 주면되겠죠
gdb를 이용해서 분석해봅시다
gdb로 bof파일을 열어주고
disas func로 func함수를 살펴보면
일단 key값을 비교하는 부분은 0x00000654 <+40>에있는 걸로 보인다
그리고 key값은 [ebp+0x8]에 있는 걸로 보이고
음... 그리고 위에 0x00000649 <+29> [ebp-0x2c]에 overflowme가 있다
자..그럼 0x8과 0x2c를 더해준값인 52바이트만큼 값을 채워주고 0xcafebabe를 입력해주면되겠다
바로 해봅시다
파이썬을 이용해서 쉽게 paylode를 작성할수있다
찾아보니 pwnable.kr 서버가 리틀에디안이기 때문에 리틀에디안 형식에 맞춰서 작성해야한다
(python -c 'print "q"*52+"\xbe\xba\xfe\xca"';cat) | na pwnable.kr 9000 을 입력해서 nc에 접속해준다음에
cat flag로 flag를 찾아주면된다
클리어!