write-up/pwnable

[pwnable.kr] fd

여니두 2019. 9. 23.

 

먼저 fd를 그냥 실행시켜 보았다.

>> argc가 2개 이상이어야 함!

 

- atoi() 함수: 문자열을 정수로 변환해준다.

입력된 argv[1]을 정수로 바꾸어 0x1234를 뺀 값이 fd 변수가 된다.

 

- read() 함수

형태: ssize_t read(int fd, void *buf, size_t nbytes)

인수: int fd > 파일 디스크립터 / void *buf > 파일을 읽어들일 버퍼 / size_t nbytes > 버퍼의 크기

 

표준 출력함수 fgets()와는 달리(파일의 첫 번째 행만 반환), read()에서 사용할 버퍼의 크기가 피일보다 크다면, 파일의 모든 내용을 읽어들이게 된다.

 

man read로 read 함수에 대한 설명을 보았다.

>> fd로부터 count만큼의 byte를 읽어서 buf에 써주는 함수이다.

 

- fd (file descriptor)

파일을 관리하기 위해 OS에서 필요로 하는 정보를 가지고 있는 정수.

즉, OS가 만드는 소켓이나 파일들에게 부여되는 정수 번호이다.

중요한 것은 Linux에서 0: 표준 입력(STDIN), 1: 표준 출력(STDOUT), 2: 표준 에러(STDERR)라는 것!

 

그렇다면, fd 값을 0으로 만들면 read() 함수는 표준 입력을 기다리게 될 것이고, 이후 그 값을 buf에 쓸 것이다!

0x1234의 DEC(정수)값은 4660이다.

 

fd 변수에는 argv[1]에 0x1234를 뺀 정수값이 들어간다.

따라서 fd를 0으로 맞추기 위해 0x1234의 정수값인 4660을 argv[1]로 넣는다.

 

 

'write-up > pwnable' 카테고리의 다른 글

[pwnable.kr] bof  (0) 2019.09.28
[pwnable.kr] collision  (0) 2019.09.26
[LOB] LOB TIP  (0) 2019.09.15
[LOB] level 1: gate  (0) 2019.09.14
[ftz] level 20: we are just regular guys  (0) 2019.08.27

댓글