pwnable.kr fd write up

pwnable.kr

2019. 12. 9. 21:18

반응형

File descriptor 문제이다.

일단 서버에 연결해보자.

ssh fd@pwnable.kr -p2222
fd@pwnable.kr's password: guest

일단 무슨 파일과 디렉터리들이 있는지 확인해보자.

ls -al

flag는 권한때문에 못 열어 볼 것 같다.

fd.c 파일을 읽어주자.

cat fd.c

자, 여기서 File Descriptor의 개념을 알아야 한다.

File Descriptor는 리눅스 시스템이 할당해준 파일이나 소켓을 대표하는 정수를 의미한다.

// Window의 Handle과 비슷하다.

 

이 중, 예약되어 있는 값이 있다.

표준입력 : 0
표준출력 : 1
표준 에러 출력 : 2

위 개념을 이해하고 다시한번 코드를 보면,

read함수에서 File Descriptor가 일어나고 있음을 알 수 있다.

여기선 첫번째 인자만 신경써주면 되는데,

첫번째 인자가 0일 경우 read에서 표준 입력을 동작하기 때문에

fd값을 0으로 입력해주면 된다.

 

코드를 살펴보면 fd는 argv[1]를 atoi함수로 변환해준 뒤 0x1234와 '-'연산을 해준다.

즉 0x1234를 10진수로 변환해서 인자값으로 넣어주면 쉽게 해결된다.

./fd 4660

그리고 if문에서 strcmp함수로 "LETMEWIN\n"과 비교해주는걸 알 수 있다.

즉 표준입력을 생성하고 위 문자열을 넣어주면 된다.

(\n은 엔터와 동일하다.)

이 문제는 pwntools를 활용해도 된다.

from pwn import *
p = ssh("fd","pwnable.kr",2222,"guest")
path = "/home/fd/fd"
argv = "4660"
payload = [path,argv]
s = p.run(payload)
s.sendline('LETMEWIN')
s.interactive()

반응형