반응형
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()
반응형