Level 9 에서는 FTZ 에서 처음으로 Buffer OverFlow 문제가 나왔다!
BOF 문제에 대해서는 많은 블로그 들에서 내용을 잘 정리해 놓았고,
설명 또한 잘 해놓은 블로그들과 책들이 굉장히 많다. 그 내용들을 참고하면 쉽게 이해할 수 있으리라 본다.
BOF는 버퍼 오버플로우 라는 공격기법이다.
Hint 의 내용을 보자 !
10 Byte 씩 buf2 와 buf란 이름의 char형 배열을 선언한다.
표준입력을 40 Byte의 크기로 buf 에 할당받는다.
그런데, if 문의 조건이 아무런 입력도 받지 않는 buf2 의 내용과 "go"를 비교하는 것이다.
하지만, buf2에는 어떤한 값도 입력 받지 않는다.
어떻게 해야 할까?
BOF의 개념을 공부하였다면 쉽게 이해 됫을 것 이다.
buf에 40 바이트만큼 표준 입력 받기 때문에, 연속되게 할당된 메모리 구조에서 buf2까지 내용을 덮어 쓸수 있다.
이 점을 이용하여 문제를 해결한다.
gdb 를 이용해서 구조를 살펴보면
여기서 주의해야 할 부분에 대해서 좀더 자세히 살펴 보면,
먼저 스택영역에 0x28 즉 40 바이트 만큼 공간을 할당한다.
main+33번 라인을 보면 buf에서 40바이트 만큼 입력받기 위한 명령을 수행함을 알 수 있다.
또한, main+55 라인에서는 buf2의 내용을 비교하는 명령을 수행함을 알 수 있다.
여기서 주의 해야할 사항은 메모리의 주소를 아는 것이다.!
딴 부분은 상관없이
go가 들어가야 하는 부분 까지만 내용을 채워주면 된다.
Good Skill이란 문구가 뜨면서 level10 권한으로 쉘이 실행됨을 알 수 있다.
buf 란 배열의 크기는 10바이트 이지만 그 이상을 입력 받아
다른 메모리까지 덮어씌우는 방식으로 이 문제를 해결하였다.
'ETC > Security' 카테고리의 다른 글
Level 11 (0) | 2013.11.04 |
---|---|
Level 10 - Share Memory(공유 메모리) (0) | 2013.11.04 |
Level 8 (0) | 2013.10.31 |
Level 7 (0) | 2013.10.31 |
Level 6 (0) | 2013.10.31 |