[pwnable.kr]Toddler/fd

 

Mommy! what is a file descriptor in Linux?

* try to play the wargame your self but if you are ABSOLUTE beginner, follow this tutorial link:
https://youtu.be/971eZhMHQQw

ssh fd@pwnable.kr -p2222 (pw:guest)

keyword : File Discriptor

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
int main(int argc, char* argv[], char* envp[]){
	if(argc<2){
		printf("pass argv[1] a number\n");
		return 0;
	}
	int fd = atoi( argv[1] ) - 0x1234;
	int len = 0;
	len = read(fd, buf, 32);
	if(!strcmp("LETMEWIN\n", buf)){
		printf("good job :)\n");
		system("/bin/cat flag");
		exit(0);
	}
	printf("learn about Linux file IO\n");
	return 0;

}

atoi(const char *str) 함수는 스트링 값을 정수 값으로 변환시켜 주는 함수이다.

ex) atoi(“123”) -> 123 #문자열 “123”이 정수 123으로 변환

ex) atoi(“a”) -> 0 # 알파벳 같은 문자열은 0으로 변환된다.

16진수 0x12344660 이다.


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

fd : 파일 디스크립터 void *buf : 파일을 읽어 들일 버퍼 size_t nbytes : 버퍼의 크기 return : 정상적으로 실행되었다면 읽어들인 바이트 수를 리턴, 실패시 -1을 반환


리눅스의 File descriptor

0 : standard input, stdin

1 : standard output, stdout

2 : standard error : stderr


fd값을 0으로 만들어 stdin을 출력하여 키보드로 입력들 받아 “LETMEWIN”을 입력하면 되겠지?

즉, fd값을 0으로 만들어 stdin으로 만들어 키보드로 부터 “LETMEWIN\n”을 입력받으면 flag가 출력된다.

fd@prowl:~$ ./fd 4660
LETMEWIN
good job :)
mommy! I think I know what a file descriptor is!!