pwnable.kr fd풀이
2016.08.31.
vi fd.c
atoi()는 ()안의 문자열에서 정수만 받는건데 예를들어 atoi(2007)이면 2007, atoi(2007start)이면 2007이지만 atoi(start2007)이면 0이다. 문자열에 정수까지만 받는 함수라고 이해하면 될 거 같다.
read(fd,buf,32)는 fd 즉 파일디스트립트 값을 읽어서 32byte만큼 읽어 buf에 데이터를 저장한다는 건데 buf와 LETMEWIN을 비교해서 맞아야한다.
우선 0x1234를 십진수로 바꾸면 4660이 나온다. 그래서 일단은 그냥 생각나는대로 페이로드를 작성해서 때려봤는데
이렇게 하는 건 아닌가 싶어서 우선 fd에 대한 정확한 개념이 없어 찾아보았다.
fd는 0,1,2로 반환하는데 0은 stdin(표준 입력), 1은 stdout(표준 출력), 2는 stderr(표준 에러)이다. 따라서 fd를 0으로 만들어 입력을 받아 buf에 저장시킬 수 있도록 만들어보자.
그리고 무작정 시도한 페이로드에는 ./fd와 `python –c’print“4660”’`으로 argc의 개수가 2개로 맞춰진다. argc,argv개념 헷갈리지 말자
우선 argv[1]에 4660을 넣어 표준입력을 받을 수 있도록 만들어주고 LETMEWIN 입력
'PWNABLE > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] PASSCODE (0) | 2016.09.27 |
---|---|
[pwnable.kr] BOF (0) | 2016.09.27 |