티스토리 뷰

[Hackerschool] F.T.Z

해커스쿨 - level16

lHATAl 2017. 11. 16. 03:04

level16의 힌트를 읽어보도록 하자.



call 함수 포인터가 printit 함수를 가리키고 있기 때문에 Hello there 이라는 문자를 출력하는 프로그램이 되었다. 우리는 fgets 함수를 통하여 버퍼 오버플로우를 일으켜 call 함수 포인터가 가리키고 있는 주소를 shell() 함수의 주소값으로 변경하여야 한다.



여기서 스택의 용량이 56바이트로 구성되어있다는 것을 알 수 있고 함수 포인터인 call은 ebp로부터 16바이트 떨어진 곳에 있다는 것을 main+36을 통해 알 수 있다. 즉 buf의 시작부터 40바이트 떨어진 곳에 있으므로 해당 위치에 shell() 함수의 주소인 0x080484d0로 덮어 씌우면 완성이다.


$(python -c 'print "A"*40+"\xd0\x84\x04\x08"';cat) | ./attackme


라는 명령어로 공격할 수 있다.

'[Hackerschool] F.T.Z' 카테고리의 다른 글

해커스쿨 - level18  (0) 2017.11.16
해커스쿨 - level17  (0) 2017.11.16
해커스쿨 - level15  (0) 2017.11.16
해커스쿨 - level14  (0) 2017.11.16
해커스쿨 - level13  (0) 2017.11.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함