사람마다 푸는 방식이 다를 수 있으니. 어려움에 있으실 때 참조만 하시고, 직접 풀어보시는 것 을 추천합니다.
구동 환경 : Windows 7
서버 환경 : VMware WorkStation 10.0 Redhat9.0 hackerschool FTZ
사용 플램 : putty (퓨티)
Level 1 을 클리어 해보자,
간단하게 풀리는 문제이다.
트레이닝을 정상적으로 올바르게 공부하시면서 들어온 사람들은 쉽게 레벨1을 클리어 할 수 있다.
login as : level1
password : level1
( 레벨1에서만 패스워드가 공개됩니다. 나머지는 풀이만 해드리고 패스워드는 알려드리지 않습니다. )
로그인이 성공했다면,
[level1@ftz level1]$ ls -al
현재 디텍토리의 파일들이 무엇이 있는지 확인하자.
해커스쿨 FTZ의 특징은 레벨에 진입할 떄마다.
그 디텍토리에 hint 라는 파일이 존재한다.
[level1@ftz level1]$ ls -al
total 88
drwxr-xr-x 4 root level1 4096 Jan 16 2009 .
drwxr-xr-x 34 root root 4096 Sep 30 02:00 ..
-rw------- 1 root root 1 Jan 15 2010 .bash_history
-rw-r--r-- 1 root root 24 Feb 24 2002 .bash_logout
-rw-rw-r-- 1 root root 224 Feb 24 2002 .bash_profile
-rw-r--r-x 1 root root 151 Feb 24 2002 .bashrc
-rw-r--r-- 1 root root 400 Feb 24 2002 .cshrc
-rw-r--r-- 1 root root 4742 Feb 24 2002 .emacs
-rw-r--r-- 1 root root 162 Feb 24 2002 .epems
-r--r--r-- 1 root root 319 Feb 24 2002 .gtkrc
-rw-r--r-- 1 root root 100 Feb 24 2002 .gvimrc
-rw-r--r-- 1 root root 47 Apr 4 2000 hint
-rw-r--r-- 1 root root 226 Feb 24 2002 .muttrc
-rw-r--r-- 1 root root 367 Feb 24 2002 .profile
drwxr-xr-x 2 root level1 4096 Dec 7 2003 public_html
drwxrwxr-x 2 root level1 4096 Jan 16 2009 tmp
-rw-r--r-- 1 root root 1 May 7 2002 .viminfo
-rw-r--r-- 1 root root 4145 Feb 24 2002 .vimrc
-rw------- 1 root root 106 Mar 6 2000 .Xauthority
-rw-r--r-- 1 root root 245 Feb 24 2002 .Xdefaults
hint 파일이 존재하는 것을 확인하였다면,
이제 cat 명령어로 hint 파일을 들여다보자.
[level1@ftz level1]$ cat hint
level2 권한에 setuid가 걸린 파일을 찾는다.
hint 파일을 들여다보니,
그 파일에는 level2 권한에 setuid 가 걸린 파일을 찾는다 라는 문구가 적혀있다.
Level1이라는 디텍토리 내에 Level2 권한에 Setuid 가 걸린 파일이 존재하는 것 같다.
SetUID?
: Set/ 변경하다 UID/ UserID ... "ID를 변경한다."
1. 파일에 걸려있는 것
2. 걸린 파일을 실행되면 자신의 아이디는 root 권한을 임시적으로 지님
3. 파일의 실행이 끝나면 원래의 아이디로 복구
기법: 레이스컨디션, IFS버그, 링크버그, 버퍼 오버플로우, 포맷 스트링 어택 등
Setuid는 Training 10장에서 배운 내용이다.
Training 10장에서 배운 find 명령어로 Setuid가 걸린 파일을 찾아보자.
[level1@ftz level1]$ find / -user level2 -perm -4300 2>/dev/null
/bin/ExecuteMe
?!
트레이닝에서 배운 find 의 경우에 "2>/dev/null" 내용은 존재하지않는다.
2> /dev/null 은 Standard Error를 모두 휴지통에 버리라는 의미이다. 그니까 에러 메시지들은 모두 출력하지 말고 버려라 라는 의미를 가진다.
만약 2>/dev/null 에 대한 더 궁금한 점이 있다면 검색을 해보는 것도 좋은 방법이다.
/dev/null
1>/dev/null
2>/dev/null
위의 3가지 관련된 리눅스 명령어가 존재한다. 현재 FTZ 에서는 2>/dev/null 만 써도 된다.
만약 2>/dev/null 을 적지 않고 그냥 입력하게 되면 아래와 같이 출력이 될 것이다.
[level1@ftz level1]$ find / -user level2 -perm -4300
find: /lost+found: Permission denied
find: /boot/lost+found: Permission denied
find: /proc/1/fd: Permission denied
find: /proc/2/fd: Permission denied
find: /proc/3/fd: Permission denied
find: /proc/4/fd: Permission denied
find: /proc/9/fd: Permission denied
find: /proc/5/fd: Permission denied
find: /proc/6/fd: Permission denied
find: /proc/7/fd: Permission denied
find: /proc/8/fd: Permission denied
find: /proc/10/fd: Permission denied
find: /proc/11/fd: Permission denied
find: /proc/19/fd: Permission denied
find: /proc/77/fd: Permission denied
find: /proc/2761/fd: Permission denied
find: /proc/3181/fd: Permission denied
find: /proc/3185/fd: Permission denied
find: /proc/3203/fd: Permission denied
find: /proc/3222/fd: Permission denied
find: /proc/3289/fd: Permission denied
find: /proc/3326/fd: Permission denied
find: /proc/3360/fd: Permission denied
find: /proc/3369/fd: Permission denied
find: /proc/3379/fd: Permission denied
find: /proc/3388/fd: Permission denied
find: /proc/3399/fd: Permission denied
find: /proc/3536/fd: Permission denied
find: /proc/3554/fd: Permission denied
find: /proc/3583/fd: Permission denied
find: /proc/3627/fd: Permission denied
find: /proc/3629/fd: Permission denied
find: /proc/3630/fd: Permission denied
find: /proc/3631/fd: Permission denied
find: /proc/3632/fd: Permission denied
find: /proc/3633/fd: Permission denied
find: /proc/18459/fd: Permission denied
find: /proc/18460/fd: Permission denied
find: /proc/18507/fd: Permission denied
find: /proc/18838/fd: Permission denied
find: /proc/18840/fd: Permission denied
find: /var/lib/slocate: Permission denied
find: /var/lib/nfs/statd: Permission denied
find: /var/lib/dav: Permission denied
find: /var/lib/xdm/authdir: Permission denied
find: /var/log/httpd: Permission denied
find: /var/log/squid: Permission denied
find: /var/log/samba: Permission denied
find: /var/cache/mod_ssl: Permission denied
find: /var/cache/alchemist/printconf.rpm: Permission denied
find: /var/cache/alchemist/printconf.local: Permission denied
find: /var/run/sudo: Permission denied
find: /var/spool/at: Permission denied
find: /var/spool/clientmqueue: Permission denied
find: /var/spool/mqueue: Permission denied
find: /var/spool/cron: Permission denied
find: /var/spool/squid: Permission denied
find: /var/spool/cups: Permission denied
find: /var/empty/sshd: Permission denied
find: /var/tux: Permission denied
find: /var/gdm: Permission denied
find: /etc/default: Permission denied
find: /etc/httpd/conf/ssl.crl: Permission denied
find: /etc/httpd/conf/ssl.crt: Permission denied
find: /etc/httpd/conf/ssl.csr: Permission denied
find: /etc/httpd/conf/ssl.key: Permission denied
find: /etc/httpd/conf/ssl.prm: Permission denied
find: /etc/cups/certs: Permission denied
find: /root: Permission denied
find: /usr/share/ssl/CA: Permission denied
/bin/ExecuteMe
find: /home/clear: Permission denied
find: /home/level10/program: Permission denied
find: /home/level5/tmp: Permission denied
find: /home/trainer1: Permission denied
find: /home/trainer10: Permission denied
find: /home/trainer2: Permission denied
find: /home/trainer3: Permission denied
find: /home/trainer4: Permission denied
find: /home/trainer5: Permission denied
find: /home/trainer6: Permission denied
find: /home/trainer7: Permission denied
find: /home/trainer8: Permission denied
find: /home/trainer9: Permission denied
디텍토리를 찾아보니, 퍼미션이 안되서 못보는 것들이 많이 존재한다.
그러나 그사이에 /bin/ExecuteMe 가 퍼미션에 적합해서 볼 수 있는 것 같다.
그렇다면 이제 cd 명령어로 사용해서 이동해보자.
[level1@ftz level1]$ cd /bin/ExecuteMe
-bash: cd: /bin/ExecuteMe: Not a directory
[level1@ftz level1]$ cd /bin
[level1@ftz bin]$ ls ExecuteMe
ExecuteMe
[level1@ftz bin]$
cd 명령어로 /bin/ExecuteMe 로 바로 이동하려고 보니, 오류가 발생되었고
ExecuteMe는 디텍토리가 아니라고 짐작이 되었다.
/bin 폴더로 이동한 다음 ls 명령어로 ExecuteMe 를 검색해보니, 파일이 존재한다고 뜬다.
그렇다면 그 파일을 ./ 명령어로 실행시켜보자.
[level1@ftz bin]$ ./ExecuteMe
그랬더니 모든 내용이 Clear 되면서 새로운 문구가 나올 것이다.
레벨2의 권한으로 당신이 원하는 명령어를
한가지 실행시켜 드리겠습니다.
(단, my-pass 와 chmod는 제외)
어떤 명령을 실행시키겠습니까?
[level2@ftz level2]$
레벨2의 권한으로 당신이 원하는 명령어를 한가지 실행시켜준다고 한다.
그러나, 바로 정답을 볼 수 있는 my-pass는 할 수 없다고 한다..-_-^
그렇다면 방법이 있다. level 2의 /bin/bash 폴더로 접속하면 my-pass 가 먹히게 되있다.
레벨2의 권한으로 당신이 원하는 명령어를
한가지 실행시켜 드리겠습니다.
(단, my-pass 와 chmod는 제외)
어떤 명령을 실행시키겠습니까?
[level2@ftz level2]$ /bin/bash
[level2@ftz level2]$
/bin/bash 명령어를 실행시키니, 좀 전에 보이던 level1@ftz level1은 사라지고, level2로 올라와있다.
그렇다면 이제 my-pass 를 쳐보자.
[level2@ftz level2]$ my-pass
Level2 Password is
[level2@ftz level2]$
성공이다. Success.
Level2 Password is ~~~~~~~~~
비밀번호가 출력이 되었다. 비밀번호를 한 곳에 적어두고, 다음 레벨로 가자.
'정보보안 카테고리 > hackschool FTZ' 카테고리의 다른 글
hackerschool FTZ : level3 풀이 (0) | 2013.10.01 |
---|---|
hackerschool FTZ : level2 풀이 (2) | 2013.10.01 |
hackerschool FTZ : Training 10 (1) | 2013.09.30 |
hackerschool FTZ : Training 6~8 (0) | 2013.09.30 |
hackerschool FTZ : Training 5 (0) | 2013.09.30 |