gunnew의 잡설

pwnable.kr 1. fd(File Descriptor) 본문

System Security

pwnable.kr 1. fd(File Descriptor)

higunnew 2020. 2. 2. 19:15
반응형

 보안 스터디를 시작했다. 보안에 대해서는 아무것도 모르지만 어찌어찌 아는 분의 소개로 조그만 스터디에 들어가게 되었다. 아직 아는 것은 없지만 열심히 해보자!

 

 역시 스터디의 맛은 문제를 푸는 것이지! 본 스터디는 pwnable.kr에 있는 문제를 중심으로 핵심 개념들을 검색하고 책을 찾아 공부해 나가며, 이외에 리눅스 커널과 관련 자료들을 바탕으로 주제를 정해 각자 발표해 나가는 방식으로 진행하기로 했다.

 

 이에 앞서 fd에 대한 개념을 모른다면 File Descrioptor에 대한 내용을 숙지해야 한다.

https://en.wikipedia.org/wiki/File_descriptor

 

File descriptor - Wikipedia

In Unix and related computer operating systems, a file descriptor (FD, less frequently fildes) is an abstract indicator (handle) used to access a file or other input/output resource, such as a pipe or network socket. File descriptors form part of the POSIX

en.wikipedia.org


1. pwnable.kr에 들어가서 위에서 부터 있는 문제들을 풀어나간다.

 

2. fd를 클릭하면 다음 창이 뜬다.

그림 1 : fd 문제

 

3. 자 이제 위 창에서 뭘 해야할지 모른다면 당신은 나와 같은 흰 도화지이다. 같이 공부해보자.


우선, 리눅스를 깔자. 멀티부팅으로 깔든, virtual machine으로 깔든, git bash로 하든, putty로 하든 일단 리눅스 환경이 필요하다. 나는 virtual machine이나 git bash로 하는 방법을 소개하겠다. 

 

커맨드 라인에 ssh fd@pwnable.kr -p2222를 입력하자. 그러면 연결 타입이 ssh에 pwnable.kr 호스트 포트번호 2222번으로 들어가 아이디 fd를 입력한 상태와 똑같게 된다. 그리고 나면 연결할 거냐고 물어보는데 'yes'를 입력하자. 그러면 password를 입력하면 된다. password는 guest임.

 

아무튼 그러면 다음과 같은 창이 뜬다. ls -al로 안에 뭐가 들었는지 확인하면 다음과 같이 뜬다.

 

 

이제 flag에 있는 내용을 확인해야 하는데 열리는 것도 안되고 권한 변경도 불가능하다. 그럼 여기서 때려치자.


 일단 fd.c를 열어서 확인해보자. cat fd.c 혹은 vi fd.c

 

 

 두 번째 인자로 int fd = atoi(argv [1]) - 0x1234가 있는데 fd가 read(fd, buf, 32)라는 시스템 콜의 인자로 넘어간다. 그런데 buf 포인터로 부터 32바이트를 읽어오는데 fd를 이용해서 읽는 것이다. 그러면 우리는 표준 입출력을 생각할 수 있고, 표준 입력의 번호는 0이다. 따라서 int fd = atoi(argv[1]) - 0x1234; 가 0이 되어야 하므로 우리는./fd 4660을 입력해주면 된다. 그러고 나서는 LETMEWIN\n과 buf가 같아야 하므로 LETMEWIN을 입력해주면 될 것이다.

 

 

 

반응형

'System Security' 카테고리의 다른 글

pwnable.kr 6. random  (0) 2020.02.05
pwnable.kr 5. passcode  (0) 2020.02.04
pwnable.kr 4. flag (UPX unpacking problem)  (0) 2020.02.02
pwnable.kr 3. bof (Buffer overflow) (Stack smashing)  (0) 2020.02.02
pwnable.kr 2. collision  (0) 2020.02.02
Comments