Hongfluenza

[FTZ] 해커스쿨 Level 4 풀이 본문

CHALLENGE/hackerschool

[FTZ] 해커스쿨 Level 4 풀이

Hongfluenza 2019. 2. 23. 00:34

[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

'CHALLENGE > hackerschool' 카테고리의 다른 글

[FTZ] 해커스쿨 Level 6 풀이  (0) 2019.08.11
[FTZ] 해커스쿨 Level 5 풀이  (0) 2019.08.11
[FTZ] 해커스쿨 Level 3 풀이  (0) 2019.02.14
[FTZ] 해커스쿨 Level 2 풀이  (0) 2019.02.13
[FTZ] 해커스쿨 Level 1 풀이  (0) 2019.02.13