[toddler's bottle] fd

폭풍저그머성찡 ㅣ 2018. 11. 29. 21:54

#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;                             // 숫자 하나를 인자로 받아 해당 수에서 0x1234를 뺀 값을 서술자로 사용해서

        int len = 0;

        len = read(fd, buf, 32);                                       // 해당 서술자의 스트림으로 32바이트를 읽어온다.

        if(!strcmp("LETMEWIN\n", buf)){                             //만약 읽어온 값이 LETMEWIN이라면 

                printf("good job :)\n");

                system("/bin/cat flag");                         // 플래그를 출력해준다.

                exit(0);

        }

        printf("learn about Linux file IO\n");

        return 0;

}



일반 상식으로 알 수 있는 문제다.


0 -> 입력스트림

1 -> 출력스트림

2 -> 에러스트림


이 이상은 있는지 잘 모르겠는데 소켓 프로그래밍 조금 공부하는 나오는 내용이다.


즉, 0번 스트림으로 켜면 표준입력 버퍼에서 값을 읽어온다는 소리가 된다.


즉, 인자는 = 0x1234 = 4660이고


0번 스트림이 열리면 LETMEWIN 쓰고 엔터치면 된다


끝!

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

[toddler's bottle] random  (0) 2018.11.30
[toddler's bottle] passcode  (0) 2018.11.30
[toddler's bottle] flag  (0) 2018.11.30
[toddler's bottle] bof  (0) 2018.11.30
[toddler's bottle] col  (0) 2018.11.30