[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”이라는 문자열을 넣고 싶으면 어떻게 해야할까요?
바로 fd를 0(stdin)으로 전달해주면, 제가 입력한 문자열이 buf에 저장될 것입니다.
그럼 atoi(argv[1]) – 0x1234 = 0이 되어야 하니, 0x1234의 값을 구해보면,
4660입니다. 그럼 argv[1]에 4660을 전달하겠습니다.
payload : ./fd 4660
그러면 입력을 받게 되는데, 여기에 LETMEWIN 치고 Enter를 쳐주면 flag가 출력됩니다!
flag가 출력됩니다.
'System&Write up > Pwnable.kr' 카테고리의 다른 글
[pwnable.kr] Toddler's Bottle - random (0) | 2017.11.28 |
---|---|
[pwnable.kr] Toddler's Bottle - passcode (0) | 2017.11.24 |
[pwnable.kr] Toddler's Bottle - flag (0) | 2017.11.23 |
[pwnable.kr] Toddler's Bottle - bof (0) | 2017.11.22 |
[pwnable.kr] Toddler's Bottle - collision (0) | 2017.11.21 |