본문 바로가기

System Security/FTZ

​FTZ level15

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

 

 - Solution

  · 'level15' Directory의 hint 내용을 확인해보면 Hint로 attackme File의 Source Code가 제공된다.
  · 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를 이용한 분석

  ◦ gdb를 이용해 분석해보면 앞서 풀었던 Level14와 유사하다는 것을 알 수 있으며 차이점은 EBP-16 영역에 주소 값이 포함되어 있다는 것이다.
  ◦ 비교할 값인 ebp-16 영역의 주소를 0xdeadbeef가 있는 주소로 Override 시키면 sh Shell을 실행할 수 있다.

  ◦ 주소를 알아보기 위해 main의 Stack 값을 확인해본다.
  ◦ 확인해보면 0x80484b0 영역 줄에 각각 2Byte씩 'beef'와 'dead'가 저장되어 있는 것을 확인할 수 있으며 이 주소가 '3881'을 제외한 부분부터 즉, 0x80484b0에 2Byte를 더한 주소인 0x80484b2에 있다는 것을 알 수 있다.
  · 명령어를 이용한 공격

  ◦ Disassembly Code로 확인해보면 위와 같은 Stack Memory 구조를 유추해낼 수 있으며 EBP-16영역에 0xdeadbeef의 주소를 넣어 줘야하기 때문에 56-16인 40 NOP 명령어로 채우고 이후에 0xdeadbeef의 주소를 넣어준다.

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

1
(python -'print "\x90"*40+"\xb2\x84\x04\x08"';cat)| ./attackme
cs

  · Password 확인

  ◦ my-pass 명령어로 Password를 확인해본다.


 - Answer
  · Password : about to cause mass
 

'System Security > FTZ' 카테고리의 다른 글

FTZ level17  (0) 2015.08.18
​FTZ level16  (0) 2015.08.18
FTZ level14  (0) 2015.08.18
FTZ level 13  (0) 2015.08.18
FTZ level12  (0) 2015.08.18