file 디스크립터에 대한 문제인듯 합니다.


문제 계정 홈에는 총 세가지의 파일이 있습니다.

실행 파일 fd, 소스파일 fd.c 그리고 flag 파일이 있습니다.

fd 파일을통해 fd2의 쉘을 획득하여 flag 파일을 읽으면 문제를 해결할 수 있을듯 합니다.


atoi 함수에 관한 설명입니다.

설명

10진 정수 문자열을 정수로 변환합니다.

      1. 문자열에서 10진 정수 숫자 문자 뒤의 일반 문자는 취소되며, 10진 정수 숫자 문자까지만 숫자로 변환됩니다. 
      2. 10진 정수 숫자 문자 앞의 공백문자는 자동 제거되어 10진 정수 숫자 문자까지만 숫자로 변환됩니다. 
      3. 공백 및 10진 정수 문자가 아닌 문자로 시작하면 0을 반환합니다.

read 함수에 대한 설명입니다.

설명

open() 함수로 열기를 한 파일의 내용을 읽기를 합니다. 

헤더unistd.h
형태ssize_t read (int fd, void *buf, size_t nbytes)
인수int fd파일 디스크립터 
 void *buf파일을 읽어 들일 버퍼 
 size_t nbytes퍼버의 크기 
반환ssize_t정상적으로 실행되었다면 읽어들인 바이트 수를, 실패했다면 -1을 반환


문제에서 fd값이 0이되면 값을 임의로 입력할 수 있습니다. 

따라서 int fd = atoi(argv[1]) - 0x1234 에서 fd에 0이 들어가도록 하면 됩니다.

argv[1]에 0x1234의 10진 정수문자열 값인 4660을 인자로 주면 atoi 함수가 정수로 변환 해주니 fd는 0으로 초기화 됩니다.


입력을 기다리고 있습니다.

strcmp 함수가 0이 되도록 하려면 LETMEWIN을 입력합니다.


fd2의 권한으로 flag 파일을 /bin/cat 명령으로 읽었습니다.


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

[pwnable.kr] mistake 1p  (0) 2016.08.19
[pwnable.kr] uaf 8p  (0) 2016.08.15
[pnwable.kr] random 1pt  (0) 2016.07.29
[pwnable.kr] passcode 10p  (0) 2016.07.29
[pwnable.kr 2번] collision 3pt  (0) 2016.07.27

+ Recent posts