FTZ - Level 4

HelloMG
|2019. 7. 13. 15:21

일단 우선 hint를 보도록 합시다!

그림 1     hint

"누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!"

힌트를 통해서 xinetd 에 관련된 문제임을 알 수 있습니다. 그러므로 xinetd 데몬의 개념을 알아야 풀 수 있습니다.

먼저 리눅스 시스템의 부팅 순서는 다음과 같습니다.

 

1. 부트 로더(Grub) 실행

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

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

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

5. 부팅 완료

 

여기서 부팅이 마무리되는 과정에서 네트워크 데몬을 가동하는 것이 xinetd 슈퍼 데몬입니다.

# 네트워크 데몬이란 ? FTP, Telnet, SSH, Apach 등과 같은 네트워크 통신을 위한 데몬을 의미한다.

# xinetd 슈퍼 데몬이란? 부모 프로세스와 자식 프로세스의 관계에서 부모 프로세스에 해당하는 데몬이다.

 

그럼 xinetd 데몬의 설정 구조를 알아보도록 합시다 :D

그림 2     xinetd 글로벌 설정

instances : xinetd 데몬에 의해 실행되는 네트워크 서비스 데몬의 최대 동시 접속 허용 

log_type : 시스템 로그 타입 설정

log_on_success : 접속 성공 시 남기는 로그

log_on_failure : 접속 실패 시 남기는 로그

cps = 25 30 : 동시 접속이 25개가 되면 30초동안 비활성화

 

그럼 이제 힌트에서 제공한 위치에서 backdoor 파일을 찾아보도록 합시다 !

그림 3     /etc/xinetd.d/backdoor

이름만 보아도 backdoor이네요 : )

이 디렉터리에는 네트워크 서비스 데몬이 모여 있는 곳입니다. 그래서 backdoor도 서비스라는 것을 짐작 할 수 있죠 :D

이제 backdoor 서비스 설정을 확인해보도록 합시다!

그림 4     backdoor

backdoor의 항목들은 다음과 같습니다.

 

disable : 데몬을 활성 또는 비활성

flags = REUSE : 서비스 포트가 사용중인 경우 해당 포트의 재사용을 허가

socket_type = stream : TCP/IP 프로토콜을 선택

wait : 서비스가 연결된 상태에서 다른요청이 들어 오면 바로 응답할 것인지 유무( no : 응답 , yes : 비응답)

user : 해당 데몬의 권한으로 실행

server : xinetd에 의해 실행될 데몬 파일

log_one_failure : 정상적인 기동에 실패한 경우 로그에 기록

 

여기서 중요하게 보아야할 점은 level5 계정의 권한으로 finger라는 서비스를 이용해

/home/level4/tmp/backdoor 파일이 실행된다는 것입니다 :D

그럼 이 파일 찾아가 보도록 합시다 !

그림 5     /home/level4/tmp

찾아가보니 backdoor 파일이 보이지 않는군요. finger 서비스를 이용해서 문제를 풀어야 할 것 같습니다.

서비스를 이용하기 위해서 포트를 먼저 확인해 봅시다 !

그림 6     finger service port

finger 서비스가 사용하는 포트는 79/tcp임을 알 수 있고 이를 이용해서 공격하면 될 것습니다 :D

그리고 활용하기 위해서는 포트가 열려있는지를 확인 해야 합니다.

확인하기 위해 다음과 같은 명령을 사용해봅시다.

그림 7     netstat -na

포트가 열려있는 것이 확인이 되었으니 해당 경로에 backdoor파일을 만들어주면 될 거예요!

그림 8     backdoor code

컴파일 후 실행 시키면 level5의 권한으로 실행되는 것을 알 수 있습니다.

그림 9     실행 결과

이를 통해 알 수 있는 것은 소스 코드의 "id"를 "my-pass"로 바꾸면 level5의 비밀번호를 알 수 있겠죠 :D

 

좀 더 가서 셸을 따기 위해 "/bin/bash"를 바꿔서 실행시키면 과연 셸을 얻을 수 있을까?

바꿔서 실행을 시켜보면 실행이 되지 않는 것을 확인 할 수 있을 거예요!

그럼 셸은 어떻게 따낼 수 있을까?

 

nc 프로그램을 이용해서 따낼 수 있는데 이것은 직접해보는 것을 추천드립니다 !

그럼 다음 문제에서 만나도록 합시다 :D

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

FTZ - Level 6  (0) 2019.07.16
FTZ - Level 5  (0) 2019.07.14
FTZ - Level 3  (0) 2019.07.12
FTZ - Level 2  (0) 2019.07.11
FTZ - Level 1  (0) 2019.07.11