-
[FTZ]해커스쿨(HackerSchool) LEVEL14 풀이(Solution)미사용/##Security 2015. 8. 15. 01:19
HackerSchool FTZ WARGAME Solution
Start : 15.07.03
LEVEL14
[그림 1]
hint 를 열어보면 [그림 1]과 같이 출력 된다. 이번에는 이전 문제와는 다르게 fgets 함수를 사용했다. fgets는 입력받을 스트림을 선택할 수 있고, 입력받을 데이터의 크기도 선택할 수 있어 버퍼 오버플로우에 비교적 안전하다고 할 수 있지만 이 문제에서는 본 버퍼의 크기보다 많은 데이터를 입력받을 수 있도록 코딩해두었다. 그리고 이번에는 check 라는 변수에 0xdeadbeef 라는 값이 있어야 상위 권한의 쉘이 실행되도록 코딩이 되어 있다.
[그림 2]
gdb로 attackme 를 열어보면 [그림 2]와 같이 출력이 되는데 우선 buf는 [ebp-56] 부터 시작되고, check 변수는 [ebp-16] 영역이라는 것을 확인할 수 있다. buf의 시작과 check 변수의 차이는 40byte 만큼 차이가 난다.
[그림 3]
fgets 함수가 stdin 으로부터 데이터를 받아오기 때문에 결국 동작은 gets 함수와 같다. 따라서 입력값 역시 gets 함수에 전달할 때와 같이 파일로 데이터를 저장해서 전달하는 방식으로 해야한다. [그림 3]은 perl을 이용해서 오버플로우와 함께 check 변수에 저장할 값을 텍스트 파일로 만들어줄 스크립트를 작성한 것이다.
[그림 4]
[그림 4] 와 같이 작성한 쉘 스크립트를 attack.txt 로 저장한다.
[그림 5]
공격 방식은 level13과 같이 파이프를 이용해서 전달하며 반드시 ;cat 을 붙여줘서 쉘이 실행되자마자 바로 종료되지 않도록 해야한다.
'미사용 > ##Security' 카테고리의 다른 글
[FTZ]해커스쿨(HackerSchool) LEVEL16 풀이(Solution) (1) 2015.08.15 [FTZ]해커스쿨(HackerSchool) LEVEL15 풀이(Solution) (0) 2015.08.15 [FTZ]해커스쿨(HackerSchool) LEVEL13 풀이(Solution) (0) 2015.08.15 [FTZ]해커스쿨(HackerSchool) LEVEL12 풀이(Solution) (0) 2015.08.15 [FTZ]해커스쿨(HackerSchool) LEVEL11 풀이(Solution) (0) 2015.08.15