level 15!
level14와 비슷하지만 check변수가 포인터이다!
포인터는 주소를 저장하고있는 변수로 check가 담고있는 주소에 0xdeadbeef가 있으면
쉘을 띄우는 system함수가 실행 될 것이다.
0xdeadbeef가 저장된 곳의 주소를 찾기위해 gdb로 보았다.
main+29를보면 ebp에서 16만큼 떨어진 부분에 eax를 넣고, %eax와 0xdeadbeef를 비교 한다.
그러면 ebp -16인 곳에 0xdeadbeef가 저장된 주소를 덮어씌워주면 될 것이다.
main+32근처부터 찾아보았다.
main+34부분에 0x080484b2에 0xdeadbeef가 있는 것을 확인!
페이로드 : nop*40 + 0xdeadbeef의 주소
예상대로 쉘이 떴다.
다음 레벨의 비밀번호를 알아내고 이동!
+) 사실 이문제는 골머리를 많이 썩은 문제인데,, buf의 주소를 알아내고 해도 안되고,, 환경변수를 이용해도 안됬다.. gdb에서 주소를 알아내도 안되고, 소스를 복사해서 buf의 주소를 출력하도록 해도 안됬다 ㅠㅜㅡ.. 랜덤스택이 문제인가해서 반복실행했었는데도 안됬다....하... 분명 맞는 방식으로 한것같은데 뭐가 문제일지..