[ftz] level4: suck my brain
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로 바꾸면 텔넷 데몬이 실행된다.
√ 공격 소스코드 작성
√ 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 |
댓글