티스토리 뷰

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 을 붙여줘서 쉘이 실행되자마자 바로 종료되지 않도록 해야한다.

신고
댓글
댓글쓰기 폼