System&Write up/Pwnable.kr

[pwnable.kr] Toddler's Bottle - fd

Jubil 2017. 11. 20. 23:09
반응형

[pwnable.kr] Toddler’s Bottle – fd





 


접속해서 파일을 확인합니다.

 

코드를 열어보면,



 

이렇게 argv[1]에 인자를 받고 그 값에서 0x1234를 뺀 값을 fd에 저장합니다.

그리고 read 함수로 읽은 값을 buf에 저장하고, “LETMEWIN\n” 문자열과 buf를 비교해서 같으면 flag를 출력하는 코드입니다.

 

여기서는 read 함수에 대한 이해가 필요한데, 원형은 이렇습니다.

ssize_t read (int fd, void *buf, size_t nbytes)

 

fd는 파일 디스크립터이고, buf는 읽은 값을 저장할 공간, nbytes는 읽을 버퍼의 크기입니다.

 

fd를 이용해서 파일을 컨트롤 할 수 있는데, 0, 1, 2는 각각 stdin, stdout, stderr로 예약되어 있습니다. 각각 자신의 역할이 있으니 그에 맞게 써야합니다.

 

 

그럼 buf“LETMEWIN\n”이라는 문자열을 넣고 싶으면 어떻게 해야할까요?

 

바로 fd0(stdin)으로 전달해주면, 제가 입력한 문자열이 buf에 저장될 것입니다.

그럼 atoi(argv[1]) – 0x1234 = 0이 되어야 하니, 0x1234의 값을 구해보면,

 


4660입니다. 그럼 argv[1]4660을 전달하겠습니다.

 

payload : ./fd 4660

 


 

그러면 입력을 받게 되는데, 여기에 LETMEWIN 치고 Enter를 쳐주면 flag가 출력됩니다!

 


flag가 출력됩니다.

반응형