티스토리 뷰

포너블/FTZ

FTZ level15풀이

삼전동해커 2020. 8. 17. 14:23

level 15를 풀어보장.


힌트를 보면



14번과 비슷하지만 check변수를 포인터로 선언했다.


일단 gdb를 보자.



main+3과 main+6에서 0x38과0x4만큼 스택을 확장했다. 총 60만큼이다.

main+21에 fgets가 있고 main+17에서 eax에 ebp-56의 값을 복사했다. 그럼 ebp-56에 buf가 있다.

main+29에서 ebp-16의 값을 eax에 복사했고, main+32에서 eax의 값과 0xdeadbeef의 값을 비교한다. 그럼 ebp-16에 check가 위치해 있겠다.


그리고 main+38에서 jne 명령어가 있는데 이 명령어는 cmp결과 값이 거짓이면 해당 명령어를 실행한다. 즉 eax와 0xdeadbeef를 비교했을 때 거짓이면 main+77로 이동한다는 것이다.


그럼 check와 0xdeadbeef를 어떻게 비교할지 고민해보자.

사실 이게 좀 어려웠다.


main+32에서 eax와 0xdeadbeef를 비교하기 위해 메모리에 0xdeadbeef를 올려놨을 것이다.

그걸 이용해 메모리에 있는 0xdeadbeef의 위치를 찾아 check자리에 그 위치를 넣으면 된다.



이 주소를 확인해보자.




0x80484b2가 0xdeadbeef의 시작위치이다. 왜냐하면 little endian 방식이기 때문에 거꾸로 들어간다. \xef\xbe\xad\xde. 확인을 해보면



0x80484b2에서 ef로 시작하는걸 볼 수 있다.

그럼 0xdeadbeef의 시작주소가 0x80484b2라는걸 알았으니 익스플로잇을 해보자.

buf의 크기 40만큼 \x90으로 채워주고 0xdeadbeef의 주소를 넣어주면 check를 바꿀수 있다.



성공


'포너블 > FTZ' 카테고리의 다른 글

FTZ level17 풀이  (0) 2020.08.17
FTZ level16풀이  (0) 2020.08.17
FTZ level14 풀이  (0) 2020.08.17
FTZ level 12풀이  (0) 2020.08.14
FTZ level11풀이  (0) 2020.08.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함