write-up/pwnable

[ftz] level4: suck my brain

여니두 2019. 7. 28.

04_xinetd 백도어

 

리눅스 서버의 네트워크를 이용하는 백도어(원격 백도어)

서버 운영체제 해킹에 해당하는 영역

xinetd 데몬 개념 알아야 한다.

 

√ 리눅스 시스템 부팅 순서

1. 부트 로더(Grub) 실행

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

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

4. xinetd (슈퍼) 데몬에 의한 네트워크 데몬 가동

5. 부팅 완료

 

* 네트워크 데몬: FTP, 텔넷, SSH, 아파치 등과 같은 네트워크 통신을 위한 데몬

데몬?

- 리눅스 서버는 텔넷, FTP, SSH, 아파치, 톰캣, rlogin 등 다양한 서비스 제공 가능하며

- 안정적인 서비스 제공을 위해 서버가 부팅될 때 이 같은 다양한 서비스를 자동으로 구동해준다.

 

√ xinetd 데몬 설정 구조 알아보기

* /etc/xinetd.conf: xinetd 서비스의 글로벌 설정

- instances = 60: xinetd 데몬에 의해 실행되는 네트워크 서비스 데몬의 최대 동시 접속 허용을 위한 데몬의 기동 수치

- log_type = SYSLOG authpriv: 시스템 로그를 "보안 및 승인에 관한 메시지 등급"으로 저장

- log_on_success = HOST PID: 접속 성공 시 원격호스트 IP와 xinetd PID를 로그에 저장

- log_on_failure = HOST: 접속 실패 시 원격호스트 IP를 로그에 저장한다는 의미. 접속 장애 원인을 분석할 수 있는 최소한의 근거를 남기는 것

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

 

 하위 (telnet) 개별 서비스 설정

- service telnet: 서비스 이름. /etc/services 파일에 있는 서비스명으로 선택하는 것을 권장

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

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

- wait = no: 이미 서비스가 연결된 상태에서 다른 요청이 오면 바로 응답함.

다르게 표현하면 telnet은 동시에 다수의 접속이 가능하다는 의미.

- user = root: 해당 데몬이 root 계정의 권한으로 실행됨

- server = /usr/sbin/in.telnetd: xinetd에 의해 실행될 데몬 파일

- log_on_failure += USERID: 정상적인 기동에 실패한 경우 USERID를 로그에 기록

- disable = no: 데몬을 비활성화하지 않음. yes로 설정된 경우에는 해당 서비스를 기동하지 않음.

 

 

이제 문제를 살펴보자.

* xinetd: 허가된 사용자인지 검사하여, 허가된 사용자라면 해당 서비스를 요청해준다.

 

/etc/xinetd.d/에 있는 백도어 >> 앞 level의 로컬 백도어와는 다른,

네트워크를 이용한 서비스 포트와 관련된 백도어라는 뜻

- 포트 백도어: 로컬 백도어와는 달리 원격에서도 사용할 수 있는 백도어

 

** 로컬, 포트 백도어의 용어 차이

: 백도어를 이용하는 곳로컬 시스템인지 OR 네트워크를 통한 원격인지의 차이

: 인증, 인가를 우회하여 신원 확인을 거치지 않은 채로 로그인하겠다는 목적은 동일

 

위 디렉토리에는 네트워크 서비스 데몬이 모여 있음.

backdoor라는 이름의 파일을 살펴보자.

앞의 서비스 설정 설명을 참고했을 때,

- user = level5: level5 계정의 권한으로

- server = /home/level4/tmp/backdoor: finger 서비스를 이용하여 이 파일이 실행된다는 것!

* finger: 리눅스에서 사용자 계정 정보를 확인하는 명령어

>> finger 서비스를 실행하면, xinetd에 의해 실행될 데몬 파일이

/home/level4/tmp/backdoor 디렉토리에 위치하게 된다.

 

finger 서비스가 사용하는 포트 = 79/tcp

>> 공격할 때 79번 포트로 접속을 시도하면 됨.

: FTZ 서버에 79/tcp 포트가 LISTEN으로 나타나야 한다는 뜻

 

79/tcp 포트 열려있음을 확인함.

 

이제 파일을 확인하려고 열어보니, 그런 파일은 존재하지 않는다고 뜬다.

??!

>> 데몬을 시작하기 위한 설정 파일이 없으므로, 네트워크 백도어가 제대로 구동되지 않는다.

 

결론: 우리는 my-pass를 실행하게 할, backdoor 역할을 할 파일을 /home/level4/tmp 경로에 생성하면 될 것 같다!

>> 79/tcp 포트에 접속 요청이 있을 때, 데몬을 실행하기 위한 backdoor 환경의 테스트 파일을 만들어주면 된다.

- backdoor 데몬 환경 설정 파일의 설정의 server를 /usr/sbin/in.telnetd로 바꾸면 텔넷 데몬이 실행된다.

 

√ 공격 소스코드 작성

backdoor.c

 

√ finger 서비스 실행

그냥 finger를 실행할 경우, backdoor 실행이 아닌 "원래 finger 기능(계정 정보 확인 기능)"이 실행된다.

- finger 기본 옵션: disable = yes // 외부 접속 시 실행 X

- backdoor 옵션: disable = no

 

>> 외부 접속을 할 경우에는 backdoor 서비스가 실행된다!

 

* 외부 서버 유저들의 정보 가져오기

finger [user] @ [host]

Level5 Password = what is your name?

 

2)

* nc와 같은 원격 접속용 프로그램을 사용하여 각자의 PC에서 아래와 같이 접속해보자.

nc ftz.hackerschool.org 79

 

- /bin/bash -i 옵션

: -i 옵션을 추가해 /bin/bash를 인터렉티브 모드로 설정하면,

리눅스 서버에서 배시셸을 실행할 수 있다.

 

'write-up > pwnable' 카테고리의 다른 글

[ftz] level 6: what the hell  (0) 2019.08.13
[ftz] level5: what is your name?  (0) 2019.08.12
[ftz] level3: can you fly?  (0) 2019.07.28
[ftz] level2: hacker or cracker  (0) 2019.07.25
[ftz] level1: find local shell backdoor  (0) 2019.07.25

댓글