FTZ level14
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 -c 'print "\x90"*40+"\xef\xbe\xad\xde"';cat)| ./attackme | cs |
· Password를 확인해본다.
- Answer
· Password : guess what