-
Pwnable.kr #1 fdWargame Site/Pwnable.kr 2019. 2. 24. 13:31
이번엔 SQL Injection 이 아닌 System 쪽이다 !!
너무나도 유명유명한 Pwnable.kr 을 풀어보려한다.
ssh 로 접근하여 푸는 문제들이 대부분인 것 같았다.
일단 접근한 계정 정보를 파악해보자.
user, group 권한이 모두 fd 로 되어있었다.
그리고나서, 파일들의 정보를 보기위해 'ls -al' 를 입력하였다.
ls 로 파일들을 보니 fd 의 권한으로는 fd 의 실행권한,
other 를 통한 fd.c 의 읽기 권한이 있는 것을 확인할 수 있었다.
fd 의 소스코드로 추정되는 fd.c 를 우선 읽어보았다.우선 처음보는 read 라는 함수를 이해하는 것이 필요했다.
man read 를 통해 기본적인 파라미터를 파악한 뒤, 이중 fd(file descriptor) 에 대한 이해가 필요한 것 같아서 더 검색해보았다.
그 결과 fd 가 0 이면 표준입력 (stdin), fd 가 1 이면 표준출력 (stdout), fd 가 2 이면 표준에러 (stderr) 를 담당한다고 한다.
'아 그럼 표준 입력으로 작동하게 하면 되겠다' 라는 생각에 입력을 해봤더니 flag 가 출력되었다.
하지만 나를 괴롭혔던 것은 ./fd 4661 , ./fd 4662 를 입력해도 문제가 풀렸다는 점이었다.
그래서 여러 블로그를 뒤져봐도 명쾌한 답은 없었다.
0 : stdin, 1 : stdout, 2 : stderr 와 같이 fd 의 용도가 정해져 있다.
본래의 프로그램에서 '프로그램을 실행했을 때, 에러가 발생한다면 stderr 에 저장한다' 와 같은 약속을 하고 있다.
하지만, 이 문제에서 read 하는 것이 어떤 것인지에 관해서 상관하지 않고 있다.
읽은 "LETMEWIN" 이 에러에 관한 것인지, 입력에 관한 것인지, 출력에 관한 것인지는 상관없이 buf 에 저장하고 있다.
따라서, 4660, 4661, 4662 어떤 것을 넣어주어도 Clear 가 가능하다.
문제를 이해하는데 큰 도움을 주신 KHJ 님 감사합니다 ㅎㅎ
'Wargame Site > Pwnable.kr' 카테고리의 다른 글
Pwnable.kr #5 cmd2 (0) 2019.04.11 Pwnable.kr #4 cmd1 (0) 2019.04.09 Pwnable.kr #3 bof (0) 2019.03.08 Pwnable.kr #2 collision (0) 2019.02.24 댓글