System Hacking

[pwnable.kr] fd

BIGFROG 2019. 7. 17. 21:08

파일 디스크립터(fd)에 대한 문제인데,

파일 디스크립터(file descriptor)란?

- 시스템으로부터 할당 받은 파일을 대표하는 정수 값(0,1,2)

- 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스

 

유닉스 시스템에서 프로세스가 파일들에 접근할 때, 파일 디스크립터를 사용한다.

 

표준입력 - 0

표준출력 - 1

표준에러 - 2

로 정수가 이미 할당되어 있다.

read()함수에서, 파일 지정 번호를 fd변수에 넣어줄 때 사용함.

 


flag는 당연히 못연다.

 

소스 해석을 해보면,

1. 인자로 전달된 값을 int형으로 만든다.

2. 이 값에 0x1234를 뺀 값을 fd에 저장한다.

3. read()함수 이용 - read()함수는 정상적으로 실행되면 읽어들인 바이트 수를 반환한다(참고)

  • fd : 파일 디스크립터(표준입력 - 0 , 표준출력 - 1 , 표준에러 - 2)
  • buf : 파일을 읽어들이는 버퍼

4. buf에 "LETMEWIN\n"문자열이 들어가도록 해야 if문이 실행될 것

5. read()함수를 이용할 때, fd의 값이 0이면 표준 입력을 지정해주므로 fd == 0 을 만들어서 read(0,buf,32) 로 만들어주면 buf에 내가 값을 입력할 수 있다.

6. argv[1]을 int형으로 만들고 0x1234를 빼주므로, 4660(0x1234)를 인자로 넘겨주면 fd == 0 이 된다.

 

7. 예상대로 표준입력을 지정해줘서 내가 입력해줄 수 있는 순간이 왔다. 여기에 LETMEWIN을 입력.

 

flag 획득.

'System Hacking' 카테고리의 다른 글

[pwnable.kr] Input  (0) 2019.07.28
[pwnable.kr] flag  (0) 2019.07.17
[pwnable.kr] bof  (0) 2019.07.17
[pwnable.kr] passcode  (0) 2019.07.17
[Root-me]ELF x86 - Stack buffer overflow basic 1  (0) 2019.07.03