ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [HackerSchool FTZ] Level 1
    Security/System 2013. 7. 18. 18:56
    336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

    Pwn&Play 신입  스터디를 위해

    FTZ 풀이를 시작합니다.


    - Level ONE -


    ftz에 level1 / leve1 로 접속하면 다음과 같은 화면을 만나게 됩니다.



    Last login: Thu Jul 18 16:34:32 from ***.***.***.***

    [level1@ftz level1]$


    level1 계정으로 로그인이 된 화면인데요, 일단 워게임형식의 진행방식이므로, 파일 목록을 살펴봅니다.



     [level1@ftz level1]$ ls

    hint  public_html  tmp


    아주 당연하듯이(?) hint 파일이 눈에 띕니다.

    hint 파일을 열어봐야겠죠?



     [level1@ftz level1]$ cat hint


    level2 권한에 setuid가 걸린 파일을 찾는다.


    Level 1의 문제입니다.

    Level 2 권한에 setuid 가 걸린 파일을 찾으라는 문제입니다.


    즉 서버 어딘가에 있는 파일에 level2의 setuid 가 걸려있는데, 그 파일을 찾아서 실행한다면 setuid 에 의해서 권한상승이 가능하다라는 말이다.


     SetUID는 해당 파일을 실행중 SetUID가 걸려있는 해당사용자로 잠시동안 권한이 변경됨을 뜻한다. 그리고 그 파일의 실행이 끝나면 다시 원래 자신의 권한으로 돌아오게 된다.*[1]



    파일을 찾기위해서 사용되는 리눅스 명령어는 "find" 명령어 이다.

    우리는 find 명령어를 통해서 level2의 계정으로 setuid가 걸린 파일을 찾아서 실행하면 된다.


     find 사용법: find [경로...] [수식]

     [ find 명령어 옵션 ]

     -perm : 특정 권한과 일치하는 파일을 찾는다.
     -name : 특정 이름과 일치하는 파일을 찾는다.
     -user : 특정 유저와 일치하는 파일을 찾는다.
     -group : 특정 그룹과 일치하는 파일을 찾는다.
     -size : 특정 사이즈와 일치하는 파일을 찾는다.   
                size 추가 옵션 형태 : find / -size n[bckw]
                        -> n을 크기를 지칭하는 정수이고, 뒤에 4개의 옵션은 단위를 지칭한다.
                             default 값은 b로 b는 블록단위, c는 바이트, k는 킬로바이트, w는 2-바이트 워드를 말한다.

    이 명령어를 아주 잘 써보면 되는데


    level2으로 setuid가 걸린 파일.

    즉 위에 명령어를 만들어보면

    user가 level2면서 perm이 setuid 가 걸려있는. 그런 파일을 찾으면 된다.



    find          /           -user level2             -perm -4000

    명령어   검색경로        user옵션            퍼미션(권한)옵션


    파일이 어디있는지 모르므로 가장 최상위부터 검색을 시도하기 위해 '/' 부터 검색하며

    level2 계정과 일치하는 파일을 찾아야 하므로 '-user level2'

    그리고 setuid 가 걸려있는 파일을 찾기위해 '-perm -4000' 을 옵션으로 준다.

    여기서 -4000 의 의미를 알아야 하는데, '-' 는 최소값을 정의(?)한다고 생각하면 된다. 즉 -4000 이라 함은 최소 4000의 권한을 가진 파일을 찾으라는 옵션이 된다.


    그리고 '4000'은 파일에 걸린 권한에 대한 문제인데.

    우리가 파일을 만들고 그 파일에 권한을 지정할때 chmod 명령어를 쓰는데, 여러분도 아시다시피 chmod 를 쓸때

    예로 chmod ./test 4755 이런식으로 지정을 준다.


    '-rwsr-x---'    1 level2   level1      12900  2월 28 10:52 /bin/ExcuteMe

    여기 파일 권한을 보면 -rw's'r-x--- 에 s가 있음을 볼 수 있다.
    여기서 s 가 setuid가 걸려있음을 의미한다.
    여기서 4000의 '4'가 's' 권한을 부여한것을 의미한다.


    • 디렉토리일 경우에는 d, 일반적인 파일일 경우에는 -가 표시

     파일 허가권(Permission)

    ⇒ "rw-", "r--", "r--" 3개씩 끊어서 읽음 (r은 read, w는 write, x는 execute)

    ⇒ 첫 번째는 소유자의 파일 접근 권한

    ⇒ 두 번째는 그룹의 파일 접근 권한

    ⇒ 세 번째는 그 외의 사용자의 파일 접근 권한


    그래서 우리는 'find / -user level2 -perm -4000' 을 입력하면 원하는 파일을 찾을 수 있을것이다.


    [level1@ftz level1]$ find / -user level2 -perm -4000

    find: /etc/default: 허가 거부됨

    find: /etc/httpd/conf/ssl.crl: 허가 거부됨

    find: /etc/httpd/conf/ssl.crt: 허가 거부됨

    find: /etc/httpd/conf/ssl.csr: 허가 거부됨

    find: /etc/httpd/conf/ssl.key: 허가 거부됨

    find: /etc/httpd/conf/ssl.prm: 허가 거부됨

    find: /root: 허가 거부됨

    find: /usr/share/ssl/CA: 허가 거부됨

    /bin/ExcuteMe

    find: /home/pwnplay: 허가 거부됨

    find: /home/clear: 허가 거부됨

    find: /home/level10/program: 허가 거부됨

    find: /home/level5/tmp: 허가 거부됨

    find: /home/trainer1: 허가 거부됨

    find: /home/trainer10: 허가 거부됨

    find: /home/trainer2: 허가 거부됨


    여기서 우리는 Level2의 setuid가 걸린 '/bin/ExcuteMe' 라는 파일을 찾았다.

    다른 결과는 권한이없어서 거부당한 에러메세지 이다.


    여기서 하나 더 팁을 주자면, 저런 에러메세지는 출력되지 않게 할 수 있다.


     [level1@ftz level1]$ find / -user level2 -perm -4000 2>/dev/null

     /bin/ExcuteMe

    이 방법인데, 명령어 뒤에 2>/dev/null 이란 옵션을 붙였다.

    이 옵션은 '2'번 메세지를 /dev/null 즉 trash 시키는 옵션인데.

    2번 메세지는 에러코드(?) 를 의미한다.

    반대로 성공메세지인 1번을 넣으면 '/bin/ExcuteMe'는 출력되지 않고 허가거부 되었다는 오류메세지만 출력된다.


    이렇게 나온 파일을 실행해보자.


    [level1@ftz level1]$ /bin/ExcuteMe




                    레벨2의 권한으로 당신이 원하는 명령어를

                    한가지 실행시켜 드리겠습니다.

                    (단, my-pass 와 chmod는 제외)


                    어떤 명령을 실행시키겠습니까?


                   [level2@ftz level2]$ 




    파일을 실행하면 이런 화면을 만나게 된다.

    웃긴것은, level2 의 암호를 알기위해서는 my-pass 를 사용해야하는데..

    치사한놈이 my-pass는 실행시켜주지않겠다고 한다.


    그래서 우리는 level2의 쉘을 이용해서 my-pass를 쓰면 된다.


    [level1@ftz level1]$ /bin/ExcuteMe




                    레벨2의 권한으로 당신이 원하는 명령어를

                    한가지 실행시켜 드리겠습니다.

                    (단, my-pass 와 chmod는 제외)


                    어떤 명령을 실행시키겠습니까?


                    [level2@ftz level2]$ sh


    sh-2.05b$ my-pass


    Level2 Password is "hacker or ****".




    이렇게 레벨1은 클리어할 수 있다.

    참쉬운문제인데 하나하나 설명하니깐 포스팅이 은근 기네욤 ㅋ.ㅋ

    'Security > System' 카테고리의 다른 글

    EggShell.c:에그쉘  (2) 2011.04.07

    댓글

Designed by Tistory.