xinetd 중 telnet 서비스를 이용할 때의 전체적인 흐름단계이다. 이해 가지 않는 다면 5단계만 알고 넘어가자.
앞에서 예를 들었던 telnet 서비스 일 때, 위의 5단계에서처럼 server행의 파일을 즉, /usr/sbin/in.telnetd 파일을 읽어 들여서 연결 시키는 것이다.
다시 돌아와서 backdoor를 읽어보자.
backdoor에 있는 내용은 위와 같음! 위의 예시인 telnet 서버처럼 생각해보자. finger이라는 서비스는 level5의 권한을 갖고 있으며 /home/level4/tmp/backdoor의 파일을 읽어 들인다.
server 행의 주소 /home/level4/tmp/backdoor는 디렉토리가 아님. 해당 주소의 파일을 읽어들이는 것이므로 첫번째 줄처럼 다가가면 안된다.
그러나 아무것도 없다... 그니까 backdoor 파일이 없는 것임. ???? /etc/xinetd.d/backdoor에 따르면 finger 서비스로 level5권한으로 /home/level4/tmp/backdoor 파일을 실행시키는 것인데 실행시킬 파일이 없다는 것이다. 그렇다면 backdoor c파일을 만들어서 my-pass를 실행시키면 level5의 my-pass가 나올 것이다
vi backdoor.c를 한 후 vim에서 쉘을 실행시키는 system 함수 이용하자.
gcc 컴파일 시키면 backdoor 완성! 이제 /home/level4/tmp/backdoor 파일을 만들었으니 finger을 실행시키면 된다.
띠용? 원래는 level5의 password가 나와야 하는데 뭔가 이상한 내용이 나옴.
해당 finger는 어디서 나온 명령어인지 알아보기위해 환경변수를 찾아보았다 ( 모든 명령어는 일종의 실행파일이므로, 명령어 입력 시 환경변수에 잡혀있는 path를 따라가서 파일이 실행된다. ) : 으로 구분되어 있는 주소를 find 명령어를 통해 finger 파일을 찾는데, /usr/bin에서 finger파일을 찾았다.
/usr/bin/ 주소로 가서 finger 파일을 실행시켜보니 이전 결과와 같았다. 즉, finger 명령어를 치면 /etc/xinetd.d/backdoor의 finger가 아닌 /usr/bin/finger가 실행되는 것이었다.
즉, finger는 1. /etc/xineted.d/backdoor 에서 사용되는 finger
2. /usr/bin/finger
두가지가 있는 것이다.
그렇다면 1. /etc/xineted.d/backdoor 에 있는 finger를 작동시키려면 어떻게 해야 할까?
xineted 특성상 A 서버의 사용자가 B 서버로 접속 시 이용하는 서비스이다. 여기서 1번 finger가 작동되지 않은 이유는 결국 local에서 했기 때문에 반응하지 않았다.
따라서, 인터넷을 통해 나에게 접속하도록 하면 된다. finger @localhost를 함으로써 네트워크를 통해 finger를 호출하기 때문에 1번 finger가 호출 될 것이다.
샤샷
추가로 /etc/xinetd.d/finger도 존재했는데
disable = yes 이므로 서비스가 작동되지 않았다. ( disable = no여야 작동 가능 )
사실상 finger는 3가지였다.
1. /etc/xineted.d/backdoor 에서 사용되는 finger
2. /etc/xineted.d/finger
3. /usr/bin/finger
참고 내용
Xinetd의 자세한 설명 !!
finger protocol은 원격 서버에 대한 인터페이스 제공 프로토콜로, 그 호스트를 이용중인 사용자에 대한 정보를 출력한다.
알고보니 finger라는 명령어가 있는데, 계정 정보 ( uid, 사용자명, 위치, 사용 쉘 등 ) 을 출력해주는 명령어이다. 명령어 위치는 /usr/bin/finger이다. 즉, /etc/xinetd.d/backdoor 안의 finger 서비스와는 다른 것이다.
1. finger 은 "현재 서버"에 로그인 이용자 출력 2. finger user 는 로컬 접속 3. finger @host 는 해당 "host서버"에 접속한 모든 유저 출력 4. finger user @host 는 "host서버"의 user 계정 정보 출력