id : level5
pw : what is your name?
<나의 풀이 기록>
1. 가장 먼저 파일 목록 확인, hint 파일 발견 후 내용 확인
2. /usr/bin으로 이동 해 level5 프로그램이 있는지, 있다면 프로그램에 대한 정보 확인
level6에게 setuid가 걸려있는 것 확인
프로그램 level5 실행해봄
아무 결과 출력되지 않음
3. 힌트 내용을 더 찾아보기 위해 cd/ tmp 명령어 입력해 tmp로 이동해 ls로 파일 목록을 확인했지만 level5.tmp라는 파일이 없다. 이번에도 파일을 직접 만드는 것일까? 아니었다.
level5에서 문제 해결의 핵심은 바로 심볼릭 링크이다.
컴퓨팅에서 심볼릭 링크(symbolic link) 또는 기호화된 링크는 절대 경로 또는 상대 경로의 형태로 된 다른 파일이나 디렉터리에 대한 참조를 포함하고 있는 특별한 종류의 파일이다. (...) 심볼릭 링크로 이름이 지정된 파일에 읽고 쓰는 프로그램들은 마치 운영 체제가 직접 대상 파일에 작용하는 것처럼 수행한다.
그러니까, 예를 들어
어떤 프로그램이 실행되면 A.txt 라는 파일이 작성될 때,
심볼릭 링크로 파일 B를 파일 A.txt와 연결하면
프로그램이 실행 될 때 파일 A.txt 뿐만 아니라 파일 B에도 같은 내용이 작성된다는 뜻
따라서 이번 문제 해결을 위한 핵심 추론 과정은
프로그램 level5 실행
-> /tmp 디렉토리에 level5.tmp라는 임시 파일을 생성(여기까지 힌트 내용)
-> 프로그램 실행 후 /tmp 디렉토리에 level5.tmp파일이 남지 않는 것으로 보아
level5.tmp파일은 프로그램 종료와 함께 삭제되는 것이라고 추측할 수 있음
그런데 우리는 level5.tmp의 내용이 궁금하니까,
/tmp 디렉토리에 임의의 파일을 하나 생성하고 이것을 level5.tmp와 심볼릭 링크로 연결해 두면
프로그램 level5실행 후 level5.tmp 파일이 삭제되더라도 같은 내용이 우리가 생성한 임의의 파일에 남아있을 것이다.
4. copy라는 임의의 파일을 만들어 주고 생성 된 것 확인
touch : 파일 생성 또는 갱신 명령어
5. copy 파일에 level5.tmp를 심볼릭 링크 걸어줌
심볼릭 링크 생성 명령어 : ln -s [대상 경로] [링크 경로]
오른 쪽 빨간 상자를 보면 level5.tmp 파일의 링크가 copy 파일에 걸린 것을 확인 할 수 있다.
6. /usr/bin 디렉토리로 이동해서 프로그램level5 실행
./level5 : 현재 디렉토리에 있는(= ./) level5 실행
7. /tmp디렉토리로 이동해 생성한 copy 파일을 열어 보니 level 6의 비밀번호 획득!
<풀이 요약>
1. hint 파일 찾아 내용 확인
2. /usr/bin 디렉토리에서 level5 프로그램 정보 확인(setuid, 실행)
3. /tmp 디렉토리에서 level5.tmp 파일 확인
4. 임의 파일(copy) 생성
5. copy 파일에 level5.tmp 심볼릭 링크 걸어줌
6. 프로그램 level5 실행
7. copy 파일 내용 확인
이 문제를 레이스 컨디션 기법으로 해결하는 방법도 있는 것 같은데, 레이스 컨디션에 대해서 공부해 보고 이 방법도 시도해봐야겠다. 프로그램 실행 후 임시 파일이 남지 않는 점으로 보아 프로그램 종료와 함께 사라질 것이라는 것을 추론하고, 심볼릭 링크로 삭제된 파일 내용을 확인하는 방법이 신기하고 재미있었다.
'해킹 공부 > 시스템 해킹' 카테고리의 다른 글
FTZ 해커스쿨 level7 - 2진수 해독(아스키 코드) (0) | 2021.11.04 |
---|---|
FTZ 해커스쿨 level6 - 리눅스 시그널 (0) | 2021.11.02 |
FTZ 해커스쿨 level4 - backdoor파일, finger (0) | 2021.10.02 |
FTZ 해커스쿨 level3 - 다중명령어 (0) | 2021.10.02 |
FTZ 해커스쿨 level2 - VIM (0) | 2021.09.26 |