#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 |