pwnable.kr의 fd 문제풀이
리눅스의 file descripor 관련 문제라고 힌트를 줍니다.
맥os를 쓰는 경우에는 해당 ssh 서버로 접속하기 위해 터미널을 띄우고 ssh fd@pwnable.kr -p2222 를 입력하면 됩니다.
password: 란에는 위에서 제시하는 guest를 입력합니다.
접속에 성공하면 다음과 같은 화면이 보입니다.
flag 값이 어디있는지 알기 위해서 일단 ls -al을 해서 해당 위치에 어떤 파일들이 있는지 파악합니다.
현재 저는 이 서버에서의 fd권한이고 봐야할 flag파일은 볼 수 없습니다.
파일 이름을 보아 fd는 fd.c의 실행파일로 보입니다. fd.c파일을 읽을 수 있기 때문에 cat명령어를 사용해서 출력해줍니다.
if문 안의 명령어를 보니, 조건을 참으로 만들어야 flag 값을 얻을 수 있을 것 같습니다.
strcmp()함수는 두 인자가 동일하면 0을 반환하기 때문에 앞에 !(not)을 붙이면 if문이 참이 됩니다.
read()함수로 buf 변수는 fd의 값을 32비트만큼 읽어서 저장합니다.
fd의 값은 실행파일 실행시 전달받는 문자열 인자값을 정수값으로 변환하여 -0x1234를 한 값입니다.
여기서, 힌트를 떠올려보면 문제는 파일 디스크립터 관련이기 때문에 개념에 대해서 블로그를 참고해봅니다.
https://dev-ahn.tistory.com/96
리눅스 - 파일 디스크립터
File Descriptor (파일 디스크립터) [출처: http://dev.plusblog.co.kr/22] 1. 파일 디스크립터 - 시스템으로부터 할당 받은 파일을 대표하는 0이 아닌 정수 값 - 프로세스에서 열린 파일의 목록을 관리하는 테이..
dev-ahn.tistory.com
파일 디스크립란 뭔가?! 부분의 표를 참고하면, 파일디스크립터가 0일때 stdin -> standard input 표준입력을 받습니다.
그렇다면 변수 fd가 0이 되기 위해서는 0x1234가 정수로 뭔지 계산기를 사용해 알아낸 후,
인자값으로 둬서 fd 실행파일을 실행해봅니다.
변수 fd가 0이 되면서 파일 디스크립터가 0으로 표준 입력을 받도록 실행됩니다.
여기에 LEMEWIN을 입력하고 엔터를 쳐줍니다.
답은 mommy! I think I know what a file descriptor is!! 입니다.
'study > CTF' 카테고리의 다른 글
[CTF]wargame.kr_img recovery (0) | 2020.04.02 |
---|---|
[CTF] pwnable.kr_collison (0) | 2020.03.31 |
[CTF]wargame.kr_WTF_CODE (0) | 2020.03.19 |
[CTF]wargame.kr_QR CODE PUZZLE (0) | 2020.03.16 |
[CTF] wargame.kr_free button (0) | 2020.03.10 |