[FTZ] 해커스쿨 Level 4 풀이
[FTZ] 해커스쿨 Level 4
id>level4
passwd>suck my brain
ls로 파일과 디렉토리를 확인한 후,
hint를 살펴보면 "누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!" 라는 힌트를 얻을 수 있다.
백도어 (Backdoor)
- 정상적인 인증 절차를 거치지 않고, 컴퓨터와 암호 시스템 등에 접근할 수 있도록 하는 방법
- 시스템 설계자나 관리자에 의해 고의로 남겨진 시스템의 보안 허점
( 설계자가 일부러 남겨놓는 경우는 개발 단계에서의 테스트를 위해, 유지 보수 시의 효율성을 위해 특수 계정을 허용하는 것. )
xinetd (extended Internet daemon)
- 오픈 소스 슈퍼 데몬으로 많은 유닉스 계열 시스템에서 돌아가며 인터넷 기반 연결을 관리한다.
- 네트워크에 들어오는 요청을 듣고, 거기에 맞는 적절한 서비스를 실행시킨다.
- 요청들은 식별자로서 포트 번호를 사용하여 만들어지며, 보통 요청을 다루는 다른 데몬을 실행시킨다.
- 접근 제어 매커니즘 + 확장된 로깅 역량 + 시간에 기반한 서비스 활성화 능력을 특징으로 가진다.
>> 시스템이 시작할 수 있는 서버들의 수를 제한할 수 있고, 포트 스캐너 같은 것들로 부터 보호할 수 있는 매커니즘을 갖는다.
설정
# default: off # description: An RFC 868 time server. This protocol provides a # site-independent, machine readable date and time. The Time service sends back # to the originating source the time in seconds since midnight on January first # 1900. # This is the tcp version. service time { disable = yes // ① type = INTERNAL // ② id = time-stream // ③ socket_type = stream // ④ protocol = tcp user = root // ⑤ wait = no // ⑥ }
# This is the udp version. service time { disable = yes type = INTERNAL id = time-dgram socket_type = dgram protocol = udp user = root wait = yes}
두 가지 서비스 버전이 있으며, 하나는 전송 제어 프로토콜(TCP)이고 다른 하나는 사용자 데이터그램 프로토콜(UDP)이다.
서비스의 종류와 예정된 사용법은 핵심 프로토콜을 결정한다.
TCP
- 패키지를 특정한 순서로 재정렬
- 무결성을 보장
- UDP 보다 느림
UDP
- 위의 기능들을 갖지는 않지만 TCP보다 빠름
① disabled
: 서비스를 실행할 것인가 아닌가를 바꿈
: 대부분의 경우에 기본 상태는 yes
: 서비스를 활성화하기 위해서는 no로 바꾼다.
② type
: <INTERNAL> 서비스가 xinetd에 의해 제공되는 경우
: <RPC> 원격 프로시저 호출(RPC)에 기반, 일반적으로 /etc/rpc 파일에 목록화
: <UNLISTED> 서비스가 /etc/services나 /etc/rpc 파일에 모두 없는 경우
③ id
: 서비스의 고유한 식별자
④ socket_type
: 서비스를 통한 데이터 전송 방식을 결정
: stream, dgram, raw가 있다
: TCP인 경우 stream, UDP일 경우 dgram
: 표준 프로토콜을 기반으로 하지 않는 서비스를 설정할 때는 마지막이 유용
⑤ user
: 실행중인 서비스의 소유자인 사용자를 고르는게 가능함
: 보안 관련한 이유로 root를 고르지 않는 것을 강력하게 추천함
⑥ wait
: yes라면 xinetd는 연결이 된 경우에 서비스를 위한 요청을 받지 않음
: 따라서, 연결의 숫자는 하나가 되는데, 이는 우리가 한번에 단지 한 연결만 설정하길 원할 때 유용함
/etc/xinetd.d/로 이동한 후 ls를 해보니,
정말로 backdoor가 있었다.
finger 서비스로 실행되는 백도어
그리고 level5의 권한으로 /home/level4/tmp/backdoor를 실행시킨다.
/home/level4/tmp로 이동한 후,
vi backdoor.c를 통해 다음과 같은 코드를 작성해 준다.
backdoor라는 이름으로 컴파일 해준 후에
( ※ gcc [옵션] [실행파일 이름] [컴파일할 파일] )
finger 서비스를 시작하면 다음과 같은 password가 나온다.
( ※ @ 다음에는 서버의 호스트 네임을 쓰는데, 여기서 localhost는 자기 자신을 뜻한다.
따라서 backdoor 파일의 user인 level5가 된다. )
출처 : https://ko.wikipedia.org/wiki/Xinetd
https://www.boannews.com/media/view.asp?idx=58568