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 |