#include <stdio.h> #include <stdlib.h> #include <string.h> char buf[32]; int main(int argc, char ** argv, char ** envp){ int fd = atoi(argv[1]) - 0x1234; int len = 0; len = read(fd, buf, 32); strcpy("LETMEWIN\n", buf); printf("fd: %d\n", fd); printf("len: %d\n", len); printf("strcmp: %d\n", strcmp("LETMEWIN\n", buf)); }
Introduction:
본 문제의 요점은 fd의 값을 0(stdin)으로 맞추는 것이다.
How to solve:
문제를 해결하기 위해 프로그램의 인자로 4660(0x1234)을 주게 되면 0번 줄의 연산을 통해 fd의 값이 0으로 맞춰지고, 그에 따라 프로그램은 표준 입력을 받게 된다. 이 때 표준 입력에 문자열 "LETMEWIN"을 넣어주면 문제가 해결된다.
Command line:
fd@ubuntu:~$ ./fd 4660
LETMEWIN
good job :)
mommy! ~!@#$%^&*()_+~!@#$%^&*()_+~!@#$%^&*()_+
fd@ubuntu:~$
Future work:
문제를 풀 때 ./fd 4660이 아닌 ./fd 4661이나 ./fd 4662를 입력해도 동일 한 방법으로 표준 입력이 열리는 것을 확인했다. fd가 0(stdin)이 아닌 1(stdout), 2(stderr)인데도 표준입력이 열리는 이유에 대해 확인 해 볼 필요를 느꼈다.
'Pwnable.kr' 카테고리의 다른 글
[1pt]mistake (0) | 2015.08.06 |
---|---|
[1pt]cmd1 (0) | 2015.08.06 |
[5pt]bof (0) | 2015.08.06 |
[1pt]random (0) | 2015.08.06 |
[2pt]lotto (0) | 2015.08.06 |