티스토리 뷰

카테고리 없음

FTZ level13 풀이

삼전동해커 2020. 8. 14. 21:03

level13을 풀어보장.


빠르게 hint먼저 보자.



long type의 i의 값이 0x1234567;로 설정했다.

buf로 1024배열만큼 지정했고, if조건으로 입력값이 있으면 strcpy함수를 쓴다.

다음 if문으로 i가 0x1234567이 아니면 warnning을 띄운 후 종료된다.


주의해야 할 점은 i의 값을 0x1234567로 정해야 한다는 것이네.




attackme를 보자.


main+3에서 0x418만큼 스택을 확장했다. 1048byte만큼...

근데 buf는 1024byte니까 24byte는 dummy인것 같다.e


그 밑에 lea  0x1234567 ebp-12가 있다. 그럼 ebp-12가 i의 위치인 것 같다.


또 main+54를 보면 ebp-1048를 eax에 옮긴 후 main+60에서 push 한다.

그럼 ebp-1048이 buf의 위치인 것 같다.


이제 생각해봐야 할건 어떻게 i위치에 값을 넣을 것인가 이다.

buf시작 위치를 알았으니 buf시작 위치부터 i가 얼마나 떨어져있는지 생각해보자.

사실 생각할 것도 없이 i는 ebp로 부터 12떨어져 있고 buf는 1048만큼 떨어져있으니 1036만큼 떨어져있다.

그럼 1036만큼 값을 넣어주고 i를 위한 값인 0x1234567(4byte)을 넣고 8만큼 dummy넣으면 스택이 꽉찬다.


다음으로 4byte만큼 sfp를 채워주면 return address를 만난다.


이 return address에는 쉘코드의 주소를  넣어주면 되겠지?


그럼 익스플로잇이

`python -c 'print"\x90"*1036+"\x67\x45\x23\x01"+"\x90"*12+"쉘코드"'`


이렇게 작성하면 되겠다.


쉘코드를 알아보러 가자.


알아봤다.

0xbffffed2이다.


`python -c 'print"\x90"*1036+"\x67\x45\x23\x01"+"\x90"*12+"\xd2\xfe\xff\xbf"'`


이렇게 넣어주면된다.




오예

 


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함