이런저런 바쁜일로 정말 오랜만에 포스팅 하네요..

이번엔 FTZ level 4를 풀어보도록 하겠습니다.

서버에 접속해 어느 때와 같이 힌트를 확인해 봅니다.

/etc/xinetd.d/에 누군가 백도어를 심어 놓았다고 하네요.


우선 /etc/xinetd.d가 뭐하는 곳인지 알아봐야겠죠?

/etc/xinetd.d/는 리눅스 인터넷수퍼데몬(xinetd)의 서비스파일들이 들어있는 디렉토리입니다.

xinetd는 인터넷 수퍼데몬(Internet Super Daemon)을 의미하는 것으로서 SENDMAIL, HTTPD 등과 같이 리눅스 시스템에서 실행되는 데몬들 중 하나입니다.
하지만 이 데몬은 리눅스 서버에서 서비스되는 여러 가지 데몬들을 제어하면서 각각 서비스의 연결을 담당하고 있기 때문에 수퍼데몬이라 불립니다.

xinetd에 의해 제어되는 가장 대표적인 서비스 중에는 telnet이 있습니다.
텔넷으로 접속을 시도할 때에는 바로 telnet으로 연결되는 것이 아니라 우선 xinetd에 의해 허가된 사용자인지를 검사합니다.
그리고 xinetdtelnet 설정파일 /etc/xinetd.d/telnet에 정의되어 있는 telnet 서비스데몬과 연결되어 사용자는 telnet 서비스를 비로소 이용하게 됩니다.


/etc/xinetd.d를 한번 확인해 보도록 합시다.

들어갔더니 버젓이 backdoor라는 파일이 보이네요. 내용을 확인해 봅시다.


백도어라 해서 들어가 봤더니 서비스 이름이 finger로 되어있네요.

각 속성들의 의미하는 바는 아래 표와 같습니다.(더 많은 정보는 xinetd.conf메뉴얼을 참고)

속성

값 및 설명

disable

나열된 서비스 값들이 실행되지 못하도록 지정.

enable 속성과 같이 존재하면, enable 속성은 무시.

flags

REUSE : 포트가 사용중(TIME_WAIT)의 경우에서도 재이용할 수 있도록 지원

INTERCEPT : 패킷 전송을 중단해, 허가된 발신처로부터 오고 있는지 확인

NORETRY : 인증에 실패할 경우 같은 서비스에 접속을 허가하지 않음.

IDONLY : 리모트 호스트로 인증되는 유저의 경우만 접속을 허가(로그 옵션의 USERID와 병용 필요)

NAMEINARGS : tcpd를 사용하는 경우에, server_arg로 지정하는 변수가 서비스에 인수(argv[0])으로 받은.

NODELAY : TCP 접속의 경우, TCP_NODELAY 플래그를 셋(set)

DISABLE : 서비스가 실행되지 않게 한다.

KEEPALIVE : TCP 접속의 경우, keep_alive가 셋(set)

 

socket_type

4가지 선택 가능한 값이 있다.

stream : stream 기반의 서비스

dgram : datagram 기반의 서비스

raw : 아이피에 직접 접근을 요하는 서비스

seqpacket : 신뢰성 있는 연속적인 데이터그램 전송을 요구하는 서비스

wait

서비스가 단일 스레드인지, 다중 스레드인지를 결정하는 플래그로 yes는 단일, no는 다중 스레드

user

서버 프로세스를 실행할 수 있는 사용자의 ID를 나타내는 것으로 슈퍼유저일 경우에만 효과를 낼 수 있음.

server

해당 서비스를 실행할 데몬 프로그램의 위치 지정.

log_on_failure

서버가 리소스 부족으로 시작될 수 없거나 설정 파일 내의 규칙에 의한 접근이 거부되었을 때 기록될 값들을 지정.

다음의 4가지 값을 조합 지정 가능.

HOST : 원격 호스트의 IP

USERID : 원격 사용자의 ID

ATTEMPT : 실패한 시도가 있을 경우

RECORD : 클라이언트에 대한 가능한 정보


finger 서비스는 시스템의 사용자정보를 확인하는 서비스입니다.
(자세한 내용은 http://korea.gnu.org/manual/release/finger/finger-ko_3.html 를 참고하시면 됩니다.ㅎ)

설정에 따르면 finger 서비스를 실행하면 level5의 권한으로 /home/level4/tmp/backdoor을 실행합니다.



디렉토리의 내용을 살펴봤는데 역시나 없네요.ㅎㅎ
(저의 경우에는 개인 구축을 했기때문에 파일이 없습니다. 해커스쿨 서버에서 하시는 분들은 파일이 있을 수도 있습니다.)


없으니 만들어 줍시다.

#cd /home/level4/tmp를 통해 해당 디렉토리로 이동하구요.
#vi backdoor.c를 통해 파일 작성을 합니다.

i를 눌러서 편집모드로 들어간후 명령어를 쭉 처준 뒤에
esc를 눌러서 명령모드로 들어가 wq를 입력해 저장 후 종료하면 됩니다.
(vi사용법은 https://mirror.enha.kr/wiki/vi에서...... ㅎㅎ)

간단한 C코드로 my-pass 명령어를 실행하라는 프로그램입니다.


코드를 짰으면 이제 컴파일을 할 차례이겠지요?

gcc를 이용해 컴파일을 해주면 됩니다.


이제 준비는 다 되었구요.
finger 서비스는 79번 포트를 기본으로 사용하고 있습니다.

원격 접속할때 79번 포트로 접속하면 바로 서비스를 이용할 수 있지요.


그럼 이제 finger 서비스를 이용하면 아까 짠 코드를 통해 비밀번호를 알 수 있을것입니다.

따로 접속하기 귀찮으니 그냥 바로 telnet으로 로컬 호스르틀 접속하도록 합시다. ㅎㅎ


짜잔!!

드디어 Level5의 암호를 얻었습니다.

암호는 what is your name?입니다.


수고하셨습니다. 조만간 level5 문제 풀이로 돌아오겠습니다.

+ Recent posts