해커스쿨 FTZ - 16단계
이번 문제는 함수포인터를 사용하는 문제이다.
사실 C언어 프로그래밍을 했지만, 함수포인터를 실제로 사용하는 코드는 처음봐서 신기했다!
아무튼 함수 포인터도 결국 포인터이다. 함수를 실행시키는 주소를 갖고있다 뿐이지.
혹시 다른 차이점이 있을까 해서 GDB로 열어보았다.
ebp-56, ebp-16. 어디서 많이 본 주소들이다. 그렇다. 같은 페이로드를 재활용해도 된다는 뜻이다.
그래서 공격방식은 매우 간단하다. call이 갖고있는 printit의 주소를 shell의 주소로 버퍼오버플로우를 통해 덮어씌우면 된다. 14단계, 15단계에서 사용했던 페이로드를 그대로 사용해서 말이다.
그렇다면 shell의 주소를 알아 볼 차례이다.
"disass shell"
Address: 0x080484d0
이곳이 공격할 주소이다. 기존의 페이로드를 활용하여 다음과 같은 페이로드를 만들었다.
(python -c 'print "A"*40+"\xd0\x84\x04\x08"';cat)|./attackme
편안하게 풀 수 있는 문제였다!
Comments
Post a Comment