Bof 파일을 실행시킨후 아무 값이나 넣어보면
이렇게 실패문자가 뜬다.ㅠ.
파일을 내려받고 bof.c파일을 열어보자.
func함수의 인자값으로 deadbeef을 넣어준 후 func 함수에서 deadbeef 값과 cafebabe 가 같으면
/bin/sh이 열리는 것을 알 수 있다.
Func 함수를 보면 32byte만큼 버퍼를 할당해주고 입력을 받는 부분이 있는데 , 이 부분을 통해 오버플로우를 통해 deadbeef 값을 cafebabe값으로 바꿔줘야 하는 것 같다.
그럼 bof 파일을 gdb로 열어서 분석해보자!!
일단 메인을 disass 명령어로 열어보면
이다. 여기까지의 스택을 그려보면
이런 식으로 되어있다.
이제 func 함수를 disass 로 분석해보면
이렇게 되어있는데 하나씩 분석해보자.
Puts 함수전에 인자값을 하나 넣어주었는데 뭔지 확인해보면
“overflow me : “ 라는 것을 알 수 있다.
그 다음 부분을 보자
32바이트 만큼 버퍼를 생성해주고 이 버퍼에 gets() 함수로 받은 값을 저장해준다!.
그 다음 아까 인자로 넘겨주었던 deadbeef 와 비교를하여 같지않으며 실패부분으로 넘어가는 것을 알 수 있다.
여기까지의 스택 모습을 그려보면
이런 모습이란 것을 알 수 있다.
따라서
초록색 부분을 오버플로우 해주면 되니까
52byte는 아무거나 넣어주고 4byte는 cafebabe을 넣어주면 된다. 따라서 페이로드를 작성해보면
(python -c ‘print “T”*52 + "\xbe\xba\xfe\xca"’ ; cat) | nc pwnable.kr 9000
이렇게 정답을 알 수 있다.
'CTF 중점 스터디' 카테고리의 다른 글
Wargame.kr - strcmp - Write up (0) | 2019.11.18 |
---|---|
N00bCTF What is bof? (0) | 2019.11.18 |
Reversing.kr - Easy Keygen Write up (0) | 2019.11.12 |
Newbie CTF REC Write up (0) | 2019.11.11 |
N00bCTF - Over the RET Write-up (0) | 2019.11.10 |