Wargame/pwnable2017. 6. 18. 18:38

pwnable.kr 사이트의 fd 문제를 열어보면 다음과 같은 화면을 볼 수 있다.


file descriptor에 대한 문제인 것 같다.

우선 ssh로 접속을 해보자.

fd, fd.c, flag 파일이 존재한다.

fd.c 파일을 열어보자.

fd.c 파일은 위와 같이 코딩되어 있다.

32 바이트 크기의 buf가 전역변수로 선언되어 있다.

fd 파일을 실행할 때 인자가 없으면 그냥 종료한다.

fd 변수에 1번째 인자 값에서 0x1234를 뺀 값을 저장하고

len 변수에 read()함수로 fd에 있는 값을 buf에 저장한 바이트 수를 저장한다.

buf에 저장된 문자가 LETMEWIN이면 system()함수로 flag 파일을 읽는다.


위에 분석한 내용을 가지고 문제를 풀어보자.


우선, file descriptor가 무엇인지 알아야 한다.

리눅스에서는 모든 프로세서는 file descriptor로 동작하게 된다.

file descriptor 중 0, 1. 2 는 시스템에서 사용하기 때문에 사용자가 실행하는 프로세서는 이 값을 제외한 값을 갖는다.


 0( standard input )

 키보드 입력을 받는다.

 1( standard output )

 입력된 값을 출력한다.

 2( standard error )

 에러 내용을 출력한다.


키보드 입력을 통해 buf에 LETMEWIN을 넣어야 하기 때문에 fd 변수에 저장되는 값이 0이 되어야 한다.

따라서 0x1234(4660)을 입력을 하면 키보드 입력을 받는다.


flag를 읽어온 것을 볼 수 있다. 이 값을 입력하면 문제가 풀린다.

'Wargame > pwnable' 카테고리의 다른 글

[pwnable.kr] bof  (0) 2017.07.25
[pwnable.kr] collision  (0) 2017.06.25
Posted by Imp3rio