첫번째 fd문제는 파일 디스크립터 문제이다
포너블을 처음시작하는 것이라서
파일 디스크립터가 무엇인지 잘모르기때문에
검색을 해보았다
파일디스크립터는 운영체제가 만든 파일이나 소켓을 지칭하기 편하기위해 부여된 숫자라고한다
자세한 설명은 이 블로그에서 쉽게 설명해주고있다
먼저 어떤파일이 있는지 확인해보기위해서 ls -l명령어로 확인한다
여기서 살펴봐야될 파일은 fd.c다
vi를 이용해서 fd.c를 열어보겠다
여기서 잘모르는 코드를이있다
atoi와 read(fd, buf, 32), strcmp인데
하나씩 찾아보았다
먼저 atoi는 문자열을 정수로 변환해주는 함수라고한다
그리고 read(fd, buf, 32)에서 fd자리에는 파일스크립터값 buf자리에는 저장할버퍼 32자리에는 읽을크기를 넣어서
전달해주는 함수라고한다
여기서 fd값에 0이 들어가면 표준입력 1은 표준출력 2는 표준에러 출력이라한다
다음은 strcmp인데 문자열비교하는 함수라고한다
이제 코드를 분석해봐야하는데 먼저 fd변수에 argv를 정수로 변환한다음 0x1234를 빼준 값을 저장한다
그리고 if 문에서 strcmp를 이용해서 LETMEWIN\n 과 buf를 비교한다
결국엔 최종적으로 flag를 봐야하는데 flag를 보기위해서는
LETMEWIN\n과 buf가 같아야한다
fd값에 0이들어가면 표준입력모드가 되어서 우리가 직접 LETMEWIN을 쳐주면 flag를 볼수있다
따라서 fd가 0이되려면 0x1234값을 입력해주면된다
0x1234값을 10진수로 변환이시키면 4660이므로 fd의 인자값으로 4660을 입력해주면 클리어
이렇게 4660을 인자값으로 넣어주고
LETMEWIN을 쳐주면
flag를 볼수있다
pwnable.kr fd문제에 flag를 입력시켜주고 auth를 눌러주면 끝!