FTZ level4 xinetd백도어

2017. 5. 23. 14:04SystemHacking/FTZ

 

 

 

level4 문제 풀이에 앞서 필요한 개념에 대해 공부하고 갑시다

이번 문제에서는 서버운영체제 해킹에 해당하는 영역이고 xinetd 데몬의 개념을 알아야 합니다

xinetd데몬은 네트워크 데몬을 가동하는 슈퍼데몬입니다

여기서 네트워크 데몬이라하면 FTP, TELNET, SSH 등 네트워크 통신을 위한 데몬입니다

중요한 파일 2가지가 있습니다


< 그림 4.0 >

/etc/xinetd.conf

- xinetd데몬의 주 설정 파일입니다

- 이 파일은 한 디렉토리를 includedir 하고 있는데 그 디렉토리는 /etc/xinetd.d/ 입니다

- /etc/xinetd.d에는 각각의 서비스에 해당하는 세부설정들을 정의한 파일들이 있다


< 그림 4.1 >


/etc/xinetd.d/ 디렉토리에는 각 서비스에 해당하는 보조 설정 파일들이 있습니다


< 그림 4.2 >

service telnet{        : 서비스의 이름

flags             : 서비스 포트가 사용중인 경우 해당 포트의 재사용 허가여부

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

wait              : 서비스가 연결된 상태에서 다른 요청이 오면 즉각응답 여부

user              : 해당 데몬이 해당계정의 권한으로 실행된다 !! 중요

server            : telnet이 실행될 때 xinetd에 의해서 실행될 데몬파일 !!중요

log_on_failure    : 로그인 실패시 기록여부

disable             : 데몬의 비활성화 여부

}



그럼 이제 문제를 풀어보도록 하겠습니다

먼저 힌트를 확인 해 봅시다


< 그림 4.3 >


backdoor 소스코드에서 다른건 몰라도 딱 2가지는 알아야합니다

service finger

{

user = level5

server = /home/level4/tmp/backdoor

}


네트워크 서비스중 "finger" 를 사용하면 !

level5의 권한으로 /home/level4/tmp/backdoor 파일을 xinetd데몬이 실행시킬 것이다

why? => service finger 설정 때문!!


< finger명령어 사용법 >

[level4 @ftz level4]$ finger : 현재 시스템에 로그인 되어 있는 사용자들을 보여준다.

[level4 @ftz level4]$ finger user명 : user를 적고 host명을 명시하지 않으면, finger는 로컬에 접속하게 된다.

[level4 @ftz level4]$ finger @host명 :host명만 적고 user를 명시하지 않으면, 해당서버의 접속해 있는 모든 유저 정보 출력



< 그림 4.4 >


[level4 @ftz level4]$finger @100.100.100.130( 자신의서버IP ) 

아무런 반응이 없습니다 이유를 이해하려면 해당 finger명령어와 xinetd데몬의 작동과정을 알아야합니다


[1] 먼저 finger @100.100.100.130 명령어를 입력합니다

[2] 그러면 /etc/xinetd.d/backdoor 의 설정에서 " service finger " 에 의해서 backdoor파일이 실행됩니다

[3] user = level5 , server = /home/level4/tmp/backdoor 설정에 의해서 server에 입력된 파일이  실행됩니다

[4] 현재 해당 파일이 존재 하지 않아서 아무런 반응이 없으므로 직접 작성해주어야합니다


< 그림 4.5 >


[level4 @ftz level4]$vi /home/level4/tmp/backdoor.c

"id" 명령어를 실행시키는 코드를 직접 작성해봅시다


< 그림 4.6 >


[level4 @ftz level4]$gcc -o backdoor backdoor.c

처음보는 " gcc " 명령어 입니다 backdoor.c 는 소스코드 파일인데 그 소스코드 파일을 컴파일 시켜주는 명령어입니다 !

여기서 -o 옵션은 backdoor파일을 생성하는 옵션입니다


[level4 @ftz level4]$finger @localhost

uid=3005(level5) gid=3005(level5)        => level5의 권한으로 id 명령어가 실행됫습니다! ( user = level5 )


[level4 @ftz level4]$./tmp/backdoor

uid=3004(level4) gid=3004(level4)        => level4의 권한으로 id명령어가 실행됫습니다!


따라서 finger 서비스와 xinetd의 작동원리를 알아야 풀 수 있는 문제였습니다.

소스코드에 "my-pass"를 추가해서 비밀번호를 얻어냅시다


[level4 @ftz tmp ]$ vi backdoor.c 


<그림 4.7 >




< 그림 4.8 >


문제풀이는 완료했습니다 !


부족한점이나 이상한 점이 있다면 알려주세요