[ftz] hackerschool level1 풀이

l hackerschool level1 풀이

실행 환경 : VMware Workstation 14 Player, Red Hat Linux 9.0

참고 도서 : 문제 풀이로 배우는 시스템 해킹 테크닉

 

** 공부를 하면서 기록하는 내용이다 보니 틀린 내용이 있을 수도 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사드리겠습니다. **


login as: level1
level1@192.168.146.128's password:

 

level1 문제의 아이디인  level1 과 password인   level1 을 입력하여 level1의 유저로 접속합니다.

 

 

[level1@ftz level1]$ ls -l
total 12
-rw-r--r-- 1 root root 47 Apr 4 2000 hint
drwxr-xr-x 2 root level1 4096 Dec 7 2003 public_html
drwxrwxr-x 2 root level1 4096 Jan 16 2009 tmp

 

 ls -l  명령어를 사용하여 현재 위치( /home/level1 ) 아래에 있는 디렉터리의 목록을 확인합니다.

목록들 중 hint 파일을 읽어 어떤 식으로 문제를 풀어야 하는지 보도록 하겠습니다.

 

 

[level1@ftz level1]$ cat hint

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

 

cat 명령어를 사용하여 hint 파일을 확인해본 결과 'level2 권한에 setuid가 걸린 파일을 찾는다.'라는 힌트를 볼 수 있습니다.

 

 

l setuid 란?

더보기

보통 setuid의 경우 실행파일에 사용됩니다. 실행파일에 setuid가 걸려있을 경우 현재 접속해있는 user의 권한이 아닌 파일 소유자의 권한으로 실행이 됩니다. 

-rwsr-xr-- 2 root level1 4096 Jan 16 2009 tmp 

 

예를 들어, ls -l을 했을 때 나왔던 tmp 디렉터리의 허가권을 약간 수정하여 위와 같을 때, level1의 사용자가 tmp 파일을 실행하게 되면 파일의 소유권을 가진 root의 권한으로 실행을 하는 것입니다.

 

 

 

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

 

위의 힌트를 참고하여 level2 권한에 setuid가 걸린 파일을 찾기 위해서는  find 라는 명령어를 사용해야 합니다.

find 명령어에 대해 궁금하신 분들은  man find  명령을 사용하여 확인하실 수 있습니다.

 

find / -user level2 -perm -4000 2>/dev/null이라는 명령어에 대해서 알아보도록 하겠습니다.

 

1. / : / 아래에 있는 모든 것을 검사하라는 것입니다.

2.  -user level2의 : 파일의 소유권이 level2인 파일만 검색하라는 옵션입니다.

3. -perm -4000 : 부가적인 설명을 밑에 같이 해두었습니다. 

4. 2>/dev/null : 숫자 2가 나타내는 의미는 표준 에러 즉, stderr를 의미합니다.  /dev/null의 의미는 간단히 휴지통 의 역할을 한다고 생각하면 됩니다. 즉 error를 모두 휴지통으로 버려서 출력을 하지 말아라의 의미입니다. 추가로 숫자 1의 경우 표준 출력 즉, stdout을 의미합니다. 따라서 2 대신 1을 넣고 실행할 경우 /bin/ExecuteMe를 제외한 Permission 에러들을 확인할 수 있습니다.

 

 

 

l 허가권에 대한 간단한 설명

더보기

허가권에 대해 간단하게 설명하기 위해 위에서 보았던 tmp 파일을 사용하겠습니다.

-rwsr-xr-- 2 root level1 4096 Jan 16 2009 tmp

 

tmp 파일에서 허가권은 -rwsr-xr-- 이 부분이며 맨 앞의 -을 제외하고 앞에서부터 3개씩 묶어서 총 3 부분으로 나눌 수 있습니다.

 

처음에 나오는 rws는 파일의 소유권을 가진 사용자가 할 수 있는 권한을 의미합니다. 즉 root의 경우 읽기, 쓰기(수정), 실행의 권한을 가지고 있습니다.

 

r-x의 경우 level1 그룹에 속한 사용자들의 권한을 의미하며 그 그룹에 속한 사용자들은 읽기, 실행의 권한을 가집니다.

 

r--의 경우 그 이외의 사용자들 즉, other를 의미하며 읽기의 권한만 있습니다.

 

참고로 rwx는 숫자로 각각 4, 2, 1을 의미합니다. 즉 -rw-r--r--의 경우 644를 의미하고, -rwxrwr--의 경우 764를 의미합니다. 

 

 

l perm옵션이란?

더보기

man find를 이용해서 find 명령어 옵션 중 -perm 부분이 나올 때까지 enter키를 이용하여 아래로 내려갑니다.

-perm 명령어를 확인해보면 mode, -mode, +mode 이렇게 세 가지가 있는 것을 볼 수 있습니다. mode 부분에는 허가권에 대한 정보가 들어가며 허가권에 대해 잘 모르시는 분들을 위해 간단하게 설명을 위에 적어두었습니다. 

 

mode, -mode, +mode의 설명 페이지를 보면 mode의 경우 정확한 허가권의 값을 가지는 파일만 출력으로 이해하기 쉽지만 -와 +의 경우 무슨 의미지 싶을 수 있습니다. 따라서 아래에 두 개의 차이를 설명하겠습니다.

 

 

[level1@ftz tmp]$ touch 1
[level1@ftz tmp]$ touch 2
[level1@ftz tmp]$ touch 3
[level1@ftz tmp]$ touch 4
[level1@ftz tmp]$ touch 5
[level1@ftz tmp]$ chmod 100 1
[level1@ftz tmp]$ chmod 200 2
[level1@ftz tmp]$ chmod 300 3
[level1@ftz tmp]$ chmod 400 4
[level1@ftz tmp]$ chmod 700 5

위와 같이 touch 명령어로 5개의 파일을 만들고 chmod를 이용하여 각각 파일에 100, 200, 300, 400, 700의 허가권을 주도록 하겠습니다. 위의 결과를 출력하게 되면 아래와 같습니다.

 

 

[level1@ftz tmp]$ ls -l
total 0
---x------ 1 level1 level1 0 Sep 23 16:03 1
--w------- 1 level1 level1 0 Sep 23 16:03 2
--wx------ 1 level1 level1 0 Sep 23 16:03 3
-r-------- 1 level1 level1 0 Sep 23 16:04 4
-rwx------ 1 level1 level1 0 Sep 23 16:04 5
srwxrwxrwx 1 mysql mysql 0 Sep 22 09:40 mysql.sock

이 결과를 바탕으로  find / -user level1 -perm -300  find / -user level1 -perm +300 의 명령어를 입력했을 때 어떤 차이가 있는지 확인해보겠습니다.

 

 

[level1@ftz tmp]$ find /tmp -user level1 -perm +300 2>/dev/null
/tmp/1
/tmp/2
/tmp/3
/tmp/5
[level1@ftz tmp]$ find /tmp -user level1 -perm -300 2>/dev/null
/tmp/3
/tmp/5

위의 결과가 +를 했을 때의 결과이고, 아래가 -를 했을 때의 결과입니다. 허가권으로 표시를 했을 때  300은  --wx-----입니다. +를 했을 경우 1, 2, 3, 5가 출력이 되었고, -를 했을 경우 3, 5가 출력되었으며, 4는 어느 것에도 출력되지 않았습니다.

 

+를 먼저 살펴보면 1, 2, 3, 5 모두 300이 나타내는 wx 둘 중 하나라도 가지고 있습니다. 즉, 1의 경우 wx 중 x를 2의 경우 wx 중 w를 3의 경우 wx 둘 다, 5의 경우 wx 둘 다 가지고 있습니다. 4의 경우는 r만 가지고 있으므로 wx 둘 중 어느 것도 없습니다. 이 결과로 볼 수 있듯이 +의 경우 내가 찾고자 하는 허가권과 파일의 허가권 중 겹치는 것이 하나 이상일 경우 출력해주는 것을 알 수 있습니다.

 

그럼 이제 -의 경우 어떤 것이 출력되는지 아실 겁니다. 허가권 300에는 wx가 들어가 있고, 3, 5번 파일 모두 wx가 들어가 있습니다. 즉, 내가 찾고자 하는 허가권과 파일의 허가권이 모두 겹쳐야 출력이 되는 것을 알 수 있습니다.

 

 

[level1@ftz tmp]$ ls -l /bin/ExecuteMe
-rwsr-x--- 1 level2 level1 12868 Sep 10 2011 /bin/ExecuteMe

 

실행파일을 확인해보면 setuid가 설정되어 있는 것을 볼 수 있고, 따라서 level1 사용자가 level2 사용자의 권한으로 파일을 실행시킬 수 있습니다.

 

 

[level1@ftz tmp]$ /bin/ExecuteMe
                                      레벨 2의 권한으로 당신이 원하는 명령어를 한가지 실행시켜 드리겠습니다.
                                                                (단, my-pass와 chmod는 제외)
                                                                어떤 명령을 실행시키겠습니까?
                                                                      [level2@ftz level2]$ sh

 

 /bin/ExecuteMe  라고 명령을 입력하게 되면 사용자가 level2로 바뀐 것을 확인할 수 있습니다. sh의 경우 셸을 실행하는 명령어로 이외에도 /bin/bash, bash 등이 있습니다. 

 

 

sh-2.05b$ id
uid=3002(level2) gid=3001(level1) groups=3001(level1)
sh-2.05b$ whoami
level2

 

셸을 취득한 후에  id  whoami  명령어를 사용하여 사용자가 누구인지 등 정보를 확인할 수 있고, level2라고 나오는 것으로 보아 level2 권한의 셸을 획득한 것을 알 수 있습니다. 

 

그 후 my-pass라는 명령어를 입력하게 되면 level2로 넘어가는 비밀번호를 알 수 있습니다.

 

 

l level2 비밀번호

더보기

Level2 Password is "hacker or cracker".

'보안 > HackerSchool-ftz' 카테고리의 다른 글

[ftz] hackerschool level6 풀이  (0) 2019.11.04
[ftz] hackerschool level5 풀이  (0) 2019.10.05
[ftz] hackerschool level4 풀이  (0) 2019.10.03
[ftz] hackerschool level3 풀이  (0) 2019.09.29
[ftz] hackerschool level2 풀이  (0) 2019.09.27

이 글을 공유하기

댓글

Designed by JB FACTORY