-
HackCTF BOF_Basic#2Wargame/HackCTF 2019. 10. 13. 22:55
간만에 포너블 라업입니다 와후
?? 일단 뭐 실행창입니다 제법 한국인의 스멜이 느껴지네요
예전 파일 권한 바꾸던 때를 떠올리며 bof_basic2 파일의 권한을 변경한 뒤
디버깅해줍니다. 잘 안 보이죠? 저도 안 보이네요.
음 이중 한번 볼만한 함수는 shell과 sup 함수가 있겠군요
해서 직접 찾아보면 shell 함수는 (system 함수가 포함된 것으로 보아)아마 shell 따주는 함수일거고, sup 함수는 (puts 함수가 포함된 것으로 보아)그걸 도와주는 함수겠거니 예상합니다. 또 sup 함수에서 하아앙이 출력됐을테니 이 함수쪽에서 어떻게 해주면 shell 함수를 실행할 수 있을듯 합니다. 이쯤에서 main 함수를 다시 보고 단서를 찾아봅시다
1. fgets 함수의 주소는 0x080484fd네요
2. 다시보니 main+20에서 ebp-0xc에 0x080484b4를 대입하는데, 0x080484b4는 sup함수의 주소입니다.
3. 물론 실제로 함수가 호출되는 부분은 main+59입니다. 프로그램의 실행 순서가 fgets -> puts 순으로 가는 걸 봐도 알 수 있죠?
4. 그렇다면 ebp-0xc에 대입되는 값을 shell 함수의 주소를 대입하고 호출하면 쉘을 딸 수 있습니다.
5. 근데 그러면 어떻게 shell 함수의 주소를 대입할 수 있죠? 하던 중에 이번 문제의 제목을 떠올렸습니다.
멍청하게도 BOF를 까먹고 있었네요 까르륵
6. BOF를 해봅시다 그럼. fgets 함수는 ebp-0x8c에서 넘겨받고, sup함수는 ebp-0xc에서 넘겨받습니다
7. 0x8c - 0xc = 0x80 = 128d , 128byte만큼 넘겨준 뒤 shell 함수의 주소를 입력하면 쉘을 딸 수 있습니다
정리해보면, 입력해야할 바이트 : 128, shell 함수 주소 : 0x0804849b
두 가지만 알면 간단하게 풀 수 있는 문제였는데, 저는 아이다의 hex-ray가 안된다며 찡찡댔네요.
BOF 더 빡시게 공부해야겠습니다.
'Wargame > HackCTF' 카테고리의 다른 글
HackCTF x64 Buffer Overflow (0) 2019.10.15 HackCTF 내 버퍼가 흘러넘친다!!! (0) 2019.10.14 HackCTF Home(WEB) (0) 2019.08.30 HackCTF Forensics 1~3 (2) 2019.08.04 HackCTF BOF_Basic#1 (0) 2019.08.04