첫인상
- 해당되는 ssh로 접근해야 한다는 것을 깨달을 수 있었다.
- fd, fd.c flag 파일이 있는 것을 확인할 수 있었다.
- 또한 첫번째 사진에서 Flag?라고 물었기에, Flag 파일을 무지성으로 실행시켜보았다.
- 실행권한이 없다는 것을 확인한 후, 다음 접근 방법은 fd.c를 vim으로 열어보는 것이었다.
문제 접근
- fd.c 를 vim으로 열었을 때, system api를 사용하여서 flag파일을 실행시킬 수 있음을 확인할 수 있었다.
- 또한 flag파일을 실행시키기 위해서는 !strcmp 가 1이 되어야한다는 것을 깨달을 수 있었다.
- strcmp함수는 arg1과 arg2가 같을 경우 “0”을 출력하기에 두 인자가 같도록 설정을 해줘야 한다는 것을 깨달았다.
- 그럼으로 “LETMEWIN\n”의 문자열을 입력할 수 있는 환경을 만들어야함을 알 수 있었다.
문제 해결 과정
- 문제를 해결하기 위해 strcmp의 인자를 맞춰줘야 한다는 것을 깨달았고, 이를 위해서는 fd를 통해 표준 입력을 진행해야 한다는 것을 알 수 있었다.
-
표준 입출력을 위해서는 stdin, 즉 0으로 file descripter를 설정해야한다는 것을 알 수 있었다. 즉, fd가 0이 되어야한다.
- fd를 0으로 만들기 위해서는 atoi(argv[1]) -0x1234를 진행해서 값이 0이 나와야한다.
- atoi는 integer(default 10진수)이기에 0x1234는 16진수 임으로 0x1234를 10진수로 변경한 값을 인자로 넣어주어야 한다.
- 0x1234(16) –> 4660(10)
문제 해결
./fd 4660
LETMEWIN
후기
- FTZ, Hackerschool 이외에 pwnable 이름만 듣고 겁먹고 있었는데 생각보다 재밌었다.
- linux OS 자체에 대한 전반적인 이해 (system에 대한 전반적인 이해)를 필요할 문제가 나올 것 같다.