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 -c '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 |