일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- rootme
- WebHacking
- Gentoo
- 해커스쿨
- EPITA
- FTZ
- 네트워크해킹
- 해외송금
- Challenge
- 보안
- 모인유럽송금
- 포너블
- Linux
- 해킹
- 백도어
- 프랑스 교환학생
- 리눅스
- 모인해외송금
- pwnable
- 루트미
- client
- 웹해킹
- pwnable.kr
- web
- 프랑스송금
- network
- wargame
- 유로송금
- 프랑스교환학생
- 모인유럽서포터즈
- Today
- Total
Securing Keys
[Linux] pwnable.kr fd 풀이 본문
현생에 집중하느라 여태껏 미뤄왔던 개인 공부를 시작하기 위해 제일 접근하기 쉬운 워게임부터 풀어보고자 한다
pwnable.kr 의 첫번째 단계: fd 를 풀어보도록 하겠다
첫번째 단계인 fd를 클릭하면 위와 같이 문제가 표시된다
File Descriptor
In Unix and Unix-like computer operating systems, a file descriptor (FD, less frequently fildes) is a unique identifier (handle) for a file or other input/output resource, such as a pipe or network socket.
File descriptors typically have non-negative integer values, with negative values being reserved to indicate "no value" or error conditions.
File descriptors are a part of the POSIX API. Each Unix process (except perhaps daemons) should have three standard POSIX file descriptors, corresponding to the three standard streams:
Integer valueName<unistd.h> symbolic constant[1]<stdio.h> file stream[2]
0 | Standard input | STDIN_FILENO | stdin |
1 | Standard output | STDOUT_FILENO | stdout |
2 | Standard error | STDERR_FILENO | stderr |
위키피디아를 통해 리눅스에서의 File Descriptor에 대해서 검색하면 위와 같은 내용을 확인할 수 있는데,
한국어로는 파일 서술자로 fd를 통칭하는 듯하다.
문제에서 알려준 쉘로 접속을 해보니, fd, fd.c, flag 파일이 존재하는 것을 확인할 수 있었다.
fd는 SetUID가 걸려있는 실행파일이었고, fd.c는 fd 실행파일의 코드였으며, flag를 우리가 궁극적으로 읽고자 하는 플래그값이 되겠다.
flag를 그냥 읽으려 하면 권한이 없어 읽지 못하기 때문에
fd 실행파일을 통해 root 권한을 잠시 빌려서 flag 파일을 읽어야 할 것으로 보인다.
fd.c 코드를 확인해보니, fd 실행파일을 실행시킬 때 한 개의 인자를 필요로 하고,
그 인자는 숫자로 0x1234와 동일한 값이어야지만이 read() 시 첫번째 인자로 0이 들어가서 standard input이 가능할 것으로 보인다.
그렇다면 0x1234가 정수로 어떤 값인지만 알면 flag를 알아낼 수 있을 것이다.
0x1234는 정수로 4660이기 때문에 fd를 실행 시 인자로 4660을 입력해주었다.
이때 4660만 입력해서는 안되고, 4660을 입력함으로써 read()가 standard input이 가능해진 상태이므로,
입력값과의 비교대상이 "LETMEWIN\n" 이기 때문에 fd 실행 후 이어서 LETMEWIN을 입력해주어야 한다.
위와 같이 fd 실행파일을 실행해주면, flag 값을 읽고 출력해주게 되고 해당 플래그를 pwnable.kr에 입력해주면 된다.
'IT > Linux' 카테고리의 다른 글
[Linux] pwnable.kr bof 풀이 (0) | 2022.04.03 |
---|---|
[Linux] pwnable.kr collision 풀이 (0) | 2022.04.02 |
[vim] 리눅스 텍스트 에디터 vi 초기 설정하기 (1) | 2020.09.10 |
[FTZ] Level 4: xinetd.d 내 서비스를 이용한 백도어 (0) | 2020.08.30 |
[FTZ] Level 3 응용: 항상 접근 가능한 백도어 쉘 만들기 (0) | 2020.08.30 |