fd
atoi(argv[1]) - 0x1234 becomes a file descriptor, so passing 4660 makes the program read from stdin.
pwnable.kr SSH 로 문제에 접속해보자.
ls -al 로 일단 어떤 파일이 있는지 훑어봐준다. 플래그 파일이 있어 바로 접근해보려 했지만, 퍼미션이 없다. flag 파일은 fd_pwn 그룹만 읽기 가능한 거 같다.
./fd 로 프로그램을 실행해봤다. pass argv[1] a number. 어떤 파일인지 감도 안 와서 C 언어 파일을 분석해보기로 했다.
코드를 둘러보자.
int fd = atoi(argv[1]) - 0x1234;
read(fd, buf, 32);
입력값에서 0x1234를 뺀 값이 read() 의 file descriptor 로 사용된다. 0x1234 는 decimal(10진수) 로 4660 이다. 파일 디스크립터의 개념을 이해하기 위해 인터넷에 서치해봤다.
우리가 원하는 건 stdin 에서 읽도록 만드는 것이기 때문에, fd 를 0으로 만들면 된다.
입력값 - 4660 = 0
입력값 = 4660
그렇기 때문에 ./fd 4660 로 파일을 실행하면, 입력할 수 있는 공간이 나온다. 그곳에 코드를 따라 LETMEWIN 를 적으면 키가 나온다.




