[1pt]fd

Pwnable.kr 2015. 8. 6. 22:17
#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
Posted by Hugh_K
l