level4의 ID와 PW는 아래와 같습니다.

 

ID : level4

PW : suck my brain

 

level4의 hint 파일을 읽으면 [그림 1]과 같이 나오게 됩니다.

[그림 1] level4의 hint 파일


"누군가 /etc/xinetd.d/에 백도어를 심어놓았다."로 보아 /etc/xinetd.d에 들어가보는 것이 좋겠다는 생각이 먼저 듭니다.

/etc/xinetd.d에 들어가면 [그림 2]와 같이 파일들의 리스트들이 보입니다.

[그림 2] /etc/xinetd.d의 디렉토리


위 그림에서 볼 때 backdoor라는 파일이 아주 눈에 띄는 것을 볼 수 있습니다.

cat 명령어를 통해 backdoor를 살펴보도록 합시다.

[그림 3] backdoor 파일의 내용


파일의 내용에는 service finger를 이용하여 다음과 같은 작업을 수행하는 것으로 보입니다.


service finger{} 안에 있는 내용에 대해 잠시 알아봅시다.


구분 

 내용

 disable

 사용 불가능에 대한 상태

 flags

 소켓이 작동될 때 사용하는 정보

 socket_type

 사용하는  TCP/IP 소켓, stream(TCP), dgram(UDP), raw, seqpacket이 올 수 있음

 wait

 yes or no로 설정 할 수 있음

yes

 xinetd가 요청된 한 데몬(daemon)이 끝날 때까지 다른 요청을 받지 않음

 single-thread service

no

 각 요청에 대해 데몬(daemon)이 작동함
 multi-thread service

 user

 데몬(daemon)의 UID를 설정, xinetd의 UID가 0이 아니면 의미가 없음

 server

 실행될 데몬(daemon), 반드시 지정되어야 함 

 log_on_failure

 로그인 실패 시 로그에 원하는 정보를 기록( log_on_failure = HOST은 HOST를 기록 )

log_on_failure += USERID

 로그인 실패에 대한 로그 정보를  추가해주며 쌓을 정보는 USERID를 넣어줌 

 log_on_success

 로그인 성공 시 로그에 아래와 같은 정보를 로그로 기록함

 PID

 프로세스ID

 HOST

 해당 호스트의 이름

 DURATION

 접속 유지시간

 EXIT

 접속 종료시간


[그림 3]의 설명은 다음과 같이 말할 수 있습니다.


- 사용 불가능이 아님

- 소켓이 동작할 때 사용하는 정보는 REUSE임

- 소켓 타입은 stream 형식

- 각 요청에 대해 데몬이 동작하는 multi-thread service임

- user ID는 level5로, 데몬의 UID는 level5임

- 실행될 데몬의 경로와 파일은 /home/level4/tmp/backdoor

- 로그온 실패시 USERID를 로그에 기록함


여기서 눈여겨 봐야 할 곳은 server에 나타나 있는 경로입니다.

이 backdoor 파일의 설명을 간단히 하면, 위와 같은 경로에 있는 backdoor 파일을 level5유저의 권한으로 실행시키는 서비스라고 할 수 있습니다. 

그렇다면 우리가 찾아봐야 하는 경로는 /home/level4/tmp입니다.

로컬로 설치했을 경우에는 /tmp에는 아무것도 없을 것입니다.

여기에 우리가 원하는 exe프로그램을 backdoor의 이름으로 만들어 level5의 권한으로 실행시킬 수 있을 것입니다.

먼저 system("id"); 를 사용해봅시다.

[그림 3] finger 서비스를 이용하여 backdoor 서비스를 실행


system("id"); 의 명령어를 수행하는 프로그램을 backdoor로 만들었을 때의 결과는 [그림 3]과 같습니다.

finger @localhost는 xnetd.d 디렉토리 내의 서비스를 실행시키는 것을 의미합니다.

이 때 backdoor라는 서비스 또한 실행되고, server가 가리키는 /home/level4/tmp/backdoor라는 파일이 실행되게 됩니다.

backdoor에 사용된 명령어는 id와 같기 때문에 level5의 권한으로 실행시킨 id 명령어는 level5의 id를 보여주게 됩니다.

[그림 4] system("my-pass")를 사용


이제 system("my-pass")를 입력하여 비밀번호를 알아내도록 합시다.

system("bash"), system("/bin/bash") 등은 사용되지 않아서....


'WARGAMES > FTZ' 카테고리의 다른 글

level08_FTZ  (0) 2016.01.07
level07_FTZ  (0) 2016.01.07
level06_FTZ  (0) 2016.01.07
level05_FTZ  (0) 2015.11.27
level03_FTZ  (0) 2015.11.20
level02_FTZ  (0) 2015.11.15
level01_FTZ  (0) 2015.11.15
FTZ - hackerschool Local Setting  (0) 2015.08.04

+ Recent posts