본문으로 바로가기

해커스쿨 FTZ level4

category Wargame/FTZ 2017. 8. 1. 22:30

level4 --- suck my brain

 

 

우선 level4 디렉토리의 hint 파일을 보자.

 

 

 

xinetd 이라는 데몬이 나온다. xinetd 데몬의 개념을 알아야 하므로 우선 리눅스 시스템의 부팅 순서를 알아보자.

 

1. 부트 로더(Grub)를 실행한다.

2. 커널 이미지를 메모리에 로딩한다.

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

4. xinted 데몬에 의해 네트워크 데몬이 가동된다.

5. 부팅이 완료된다.

 

4번에서 네트워크 데몬이 가동되는데 네트워크 데몬을 가동하는 것이 xinetd 슈퍼 데몬이다.

네트워크 데몬은 FTP, 텔넷, SSH, 아파치 등과 같은 네트어크 통신을 위한 데몬이다.

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

 

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초 동안 서비스를 비활성화 한다.

 

개별 서비스에 대한 설정이다. 텔넷을 기준으로 보자.

 

 

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

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

socket_type = stream                //  TCP/IP 프로토콜을 선택한다.

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

user = root                                //  해당 데몬이 root 계정의 권한으로 실행된다.

server = /user/sbin/in.telnetd   //  xinted에 의해 실행될 데몬 파일이다.

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

disable = no                              //  데몬을 비활성화하지 않는다.

 

다음과 같이 xinetd을 알아보았다면 다시 힌트를 기반으로 문제 분석을 해보자.

 

 

 

힌트를 바탕으로 /etc/xinetd.d/에 백도어가 있는지 확인 했는데 위와 같은 이름으로 backoor가 존재한다는 것을 알 수 있다.

/etc/xinetd.d/ 디렉토리에는 네트워크 서비스 데몬이 모여있다는것을 알 수 있다. backdoor 서비스의 설정을 확인해 보자.

 

 

finger라는 데몬이 level5의 권한으로 실행되어 /home/level4/tmp/backdoor 파일을 실행한다는 뜻이다.

 

 

위와 같이 finger 서비스가 사용하는 포트는 79/tcp이다. 따라서 공격할 때 79번 포트로 접속을 시도해야 한다.

79/tcp 포트로 접속을 시도해야 한다는 것은 FTZ 서버가 79/tcp에 LISTEN 이어야 한다. FTZ 서버에 열려 있는 포트를 확인해 보자.

 

 

 

다음과 같이 79/tcp 포트가 열려 있다. 참고로 22/tcp는 SSH에 대한 포트이고, 23/tcp는 telnet에 관한 포트이다.

우리가 공격할 때 사용할 79/tcp 포트가 열려있음을 확인했으니 실행될 데몬 파일을 확인해보자.

 

 

데몬을 시작하기 위한 설정 파일이 없으므로 네트워크 백도어가 제대로 구동되지 않는다. 79/tcp 포트로 접속해보자.

 

 

79/tcp 포트로 접속하면 데몬을 시작하기 위한 설정파일(/home/level4/tmp/backdoor)가 없기 때문에 아무런 결과가 나오지 않는다.

데몬을 정상적으로 실행하기 위해서 backdoor 환경의 테스트 파일을 만들어 주어야 한다. 우리의 목적에 맞는 명령어를 실행할 수 있는 프로그램을 /home/level4/tmp/backdoor라는 파일로 만들어야 한다.

 

 

위에 작성한 backdoor.c는 우리가 지금까지 분석한 내용이 정확한지 확인하기 위해 hint 파일을 열어보고 로그인 계정을 확인하는 명령어를 실행하는 코드를 작성했다.

 

 

위에 실행된 명령어를 보면 level5의 권한으로 실행되었음을 알 수 있다.

이제 level5의 패스워드를 알기 위해 소스코드를 수정해 다시 실행해 보자.

 

 

위와 같이 backdoor.c의 소스를 수정한 후 컴파일하면 level5의 패스워드를 확인할 수 있다.

 

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

해커스쿨 FTZ level6  (0) 2017.08.17
해커스쿨 FTZ level5  (0) 2017.08.11
해커스쿨 FTZ level3  (0) 2017.07.31
해커스쿨 FTZ level2  (0) 2017.07.28
해커스쿨 FTZ level1  (4) 2017.07.23