[해커스쿨FTZ]Level4

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

/etc/xinetd.d 디렉토리로 가보면, backdoor라는 파일이 있다.

ls -al로 확인한 결과, 읽기만 가능한 파일이었다.

우선 xinetd란? 데몬의 종류 중 하나이며 xinetd데몬, 인터넷 슈퍼데몬이라고 부른다.

*데몬이란, 시스템에 관련된 작업을 하는 후위 프로세스(백그라운드 프로세스)이다.

xinetd란 tcp wrapper가 제공하는 것과 비슷한 접근제어를 제공하며,

socket-bind-listen-accept를 자동으로 처리해준다.

이 슈퍼데몬은 리눅스 서버에서 서비스되는 다른 여러가지 데몬들을 제어하면서,

각각의 서비스들의 연결을 담당하고 있다.

어떤 데몬 서비스를 이용하려는데 슈퍼데몬이 이를 허가된 사용자인지를 검사한다.

리눅스 데몬 중 슈퍼데몬에 의해 제어가 되는 데몬은

telnet, ftp, finger, login, shell 등이 있다.

데몬에는 실행모드가 두 가지가 있는데,

1. standalone모드 - 독립적으로 실행된다.
2. xinetd모드 - 슈퍼데몬(xinetd)에 의해 관리되는 모드



다시 문제로 돌아와서, cat을 이용해 백도어 파일을 열어보면

service finger라고 되어 있는 것을 확인할 수 있다.

이는 finger라는 데몬을 연결하는 것을 의미한다.

그 아래에는 각각 다음과 같은 의미를 갖는다.

user - 서비스를 사용할 사용자의 이름(사용자권한)
socket_type - stream, dgram, raw 값을 지정 가능.
                  TCP인 경우 stream, UDP인 경우 dgram으로 지정.
wait - Yes는 단일쓰레드, No는 멀티쓰레드로 동작한다. 
         stream일 경우 No로 설정한다.
server - 서비스(이 문제에서는 finger)가 연결되었을 때 실행할 프로그램


이 문제에서 서버에는 tmp디렉토리 안에 있는 backdoor로 설정이 되어 있으나,

해당 경로로 가보면 backdoor파일이 없는 상태임을 알 수 있다.

여기서 backdoor를 실행 파일로 하나 만들어줘야 함을 알 수 있다.

vi에디터를 이용해 backdoor.c파일을 만들자.

#include <stdlib.h>

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

이후 gcc -o backdoor backdoor.c로 컴파일을 시켜주면

backdoor파일이 생성되었음을 알 수 있다.

이제 finger를 이용해 방금 만든 backdoor파일을 실행시키면 된다.

finger란, 사용자 계정 정보 등을 알려주는 서비스이다.

finger [옵션] username@hostname 과 같은 방식으로 사용하면 된다.

finger @localhost로 입력을 주니

backdoor파일이 정상적으로 실행되면서

level5권한의 my-pass가 실행되어 flag를 얻을 수 있었다.

댓글