본문 바로가기

해킹공부/pwnable.kr

fd

 

pwnable.kr에서 가장 쉬운 Toddler's bottle, 그 중 제일 기본적인 fd문제이다.

우선 소스코드를 확인해보자.

 

 

 

main의 argument로 받은 값을 atoi함수를 사용해 int로 변환시킨다.

argument로는 int값을 줘야 되는 것 같다.

 

정수형으로 바꾼 argument값에서 0x1234를 뺀 값을 fd라는 변수에 저장하고

read()함수에서 file descriptor로 사용해 값을 읽어와 buf에 저장한다.

그리고 이 값이 문자열 "LETMEWIN"과 같으면 flag를 보여준다.

 

보통 file descriptor는 open함수를 사용해 생성하지만 이 코드에선 어디에서도 open함수를 사용하지 않는다.

즉 기존에 있는 file descriptor를 사용해야 한다.

 

 

 

리눅스에선 다음과 같이 file descriptor table을 만들어 모든 입력 및 출력을 받아온다.

standard in, standard out도 마찬가지로 txt파일에 있는 값을 read, write함수를 사용해 읽어오듯 입력을 받는다.

이 때 stdin의 file descriptor는 0, stdout은 1을 사용한다.

 

즉 위 코드에서 fd변수에 0이 입력되고나서

 read(fd, buf, 32); 이 줄이 실행되면 stdin으로 buf에 값을 넣어줄 수 있다.

그럼 atoi(argv[1])의 값이 0x1234 여야한다.

0x1234 = 4660

 

 

이렇게 사용자 입력을 기다린다.

 

LETMEWIN을 입력해주면 이렇게 flag를 확인할 수 있다

'해킹공부 > pwnable.kr' 카테고리의 다른 글

mistake  (0) 2017.08.30
random  (0) 2017.08.30
flag  (0) 2017.08.30
bof  (0) 2017.08.29
collision  (0) 2017.08.29