System Security/FTZ

FTZ level14

The_j.n 2015. 8. 18. 22:24

FTZ level 14
 - Question
  · level14 ID로 Login해서 level15의 password를 찾기


 - Solution

  · 'level14' Directory의 hint 내용을 확인해보면 Hint로 attackme File의 Source Code가 제공된다.
  · 이 문제부터는 Format String 기법 또한 사용이 가능하지만 일단 BOF 기법을 이용해 연습한다.
  · Source Code 분석
  ◦ Stack Memory 영역에 crap 변수를 4Byte만큼, check 변수를 4Byte만큼, buf 변수를 20Byte만큼 확보한다.
  ◦ check 변수의 값과 0xdeadbeef를 비교해 일치하면 level15 권한의 sh Shell을 실행시킨다.
  ◦ 'fgets' 함수가 사용되었으며 이를 이용해 BOF 공격을 해야 한다.

  · File을 분석하기 위해서는 gdb를 사용해야하는데 원본 File이 level14에 대해서만 쓰기(w)가 가능하므로 쓰기 권한이 주어진 tmp Directory에 복사 후 분석해야한다

  · gdb를 이용해 분석해보면 처음에 0x38(56Byte)만큼 Stack Memory 영역을 확보하고 0x4(4Byte) 만큼의 Stack Memory 영역을 확보한다.
  · 여기서 56Byte만큼 확보된 영역에 crap 변수, check 변수, buf 변수 모두가 포함되어 있으며 나머지 부분은 Dummy 영역으로 확보되어 있다고 할 수 있다.
  · cmp 명령어로 ebp-16영역의 값 4Byte와 0xdeadbeef를 비교하는 것으로 보아 ebp-16(40Byte 영역부터) 부분이 check 변수 영역이라는 것을 알 수 있다.

  · 확보된 Stack Memory 영역을 그림으로 표현하면 위와 같이 표현할 수 있다.

  · Python을 이용한 명령어로 File을 실행해본다.
  · 명령어 

1
(python -'print "\x90"*40+"\xef\xbe\xad\xde"';cat)| ./attackme
cs

  · Password를 확인해본다.


 - Answer
  · Password : guess what