시스템 모의해킹

메타스플로잇(Metasploit)의 개념과 메타스플로잇을 활용한 정보 수집 실습

ahhyun98 2025. 5. 5. 22:19

 

정보보안 분야에서 취약점 분석침투 테스트는 필수적인 기술이다. 

그중 메타스플로잇(Metasploit) 취약점을 분석하고 악용 실습을 할 수 있는 강력한 도구이다.

 

이번 포스트에서는 메타스플로잇을 활용한 정보 수집 기법을 실습했다. 

포트 스캔, HTTP 버젼 탐지, 웹 크롤링 등 기본적인 정보 수집 방법을 경험해 보았다. 


1. 메타스플로잇(Metasploit)이란? 

 

메타스플로잇은 정보보안 전문가들이 시스템의 취약점을 분석하고 악용할 수 있도록 도와주는 오픈 소스 해킹 프레임워크이다.

반면에 해커들은 취약점 공격을 자동화하고, 다양한 익스플로잇(취약점 공격 코드)과 페이로드(악성코드의 핵심)를 사용하여 시스템에 침투하는 데 사용한다. 

보안 평가, 침투 테스트, 악성 코드 분석 등 다양한 보안 작업에 사용되며, 해킹과 방어 훈련에도 유용하다. 

메타스플로잇은 커맨드 라인그래픽 사용자 인터페이스(GUI)를 모두 지원해 사용자 편의성을 제공한다. 

 


2.  관련 용어 정리

용어 설명
exploit 취약점을 악용하는 공격 코드
payload 공격 성공 시 실행되는 악성 코드
post-exploitation 공격 성공 후 수행되는 추가 활동
module 특정 기능을 수행하는 구성 요소 (Ruby 언어로 작성된다.)
listener 공격 대상의 연결을 대기하는 수신 장치
session Metasploit과 대상 간의 연결 채널
PoC 취약점 존재를 증명하는 코드나 문서 

 


3. Metasploit 기본 사용법

  • msfconsole : Metasploit의 기본 인터페이스
# 단독 실행
msfconsole

# DB 연동 후 실행
service postgresql start; msfconsole

 


4. 주요 명령어 정리

명령어 설명
help 사용 가능한 명령어 목록과 설명 확인
search 사용할 수 있는 모듈 검색
use 특정 모듈 사용 (ex. use exploit/multi/handler) 
=>use를 사용하여 해당 모듈이 있는 경로 폴더로 가게 된다. 
info 모듈 정보 확인
show 옵션(options => 모듈을 실행시킬 수 있는 필수적인 세팅을 해준다.)
payload, 대상 정보 확인
set 설정값 입력 (ex. set LHOST 0.0.0.0)
setg 전역 설정
check 취약점 여부 확인
exploit 또는 run 모듈 실행 => 필수적인 세팅이 끝나면 exploit이라는 명령어로 모듈을 실행시킬 수 있다. 

 


5. Metasploit 기본 사용 순서

search -> use -> info -> show -> set (또는 setg) -> check -> exploit 또는 run

 


6. Metasploit을 활용한 정보 수집 실습 

 

정보 수집 (Information Gathering)

 

공격 대상 시스템이나 네트워크에 대한 다양한 정보를 수집하는 단계로, 침투 테스트의 첫 번째이자 매우 중요한 과정이다.

IP 주소, 운영체제, 서비스 포트, 도메인 정보 등을 파악하여 이후 취약점 분석공격 전략 수립에 활용된다. 

 

 

실습 환경 준비

 

1. Metasploit 설치하기 : Kali Linux에서 Metasploit을 실행할 수 있도록 준비한다. 

2. DVWA 환경 설정하기 : DVWA취약점 분석을 위한 테스트 환경으로 사용되며, 웹 애플리케이션을 대상으로 취약점 분석을 진행할 수 있다. DVWA는 다양한 난이도의 취약점을 제공한다. 

 

  • DVWA URL : http:[IP 주소]/dvwa/login.php

 

 

6-1) 포트 스캔하기

 

auxiliary/scanner/portscan/tcp 모듈을 사용하여 특정 IP 포트를 스캔했다.

 

 

1. 포트 스캔 모듈 사용

 

1. 메타스플로잇 실행하기

메타스플로잇을 실행하여 msfconsole 명령어를 입력했다. 

msfconsole

 

 

2. 모듈 선택하기

포트 스캔을 찾기 위해 search 명령어를 사용했다. 

msf6 > search scanner/portscan/tcp

 

검색 결과, auxiliary/scanner/portscan/tcp 모듈을 발견했다. 

이 모듈은 TCP 포트를 스캔하는 기능을 제공한다. 

 

3. 모듈 로드

 

모듈을 선택한 후, use 명령어로 해당 모듈을 로드했다. 

 

msf6 > use auxiliary/scanner/portscan/tcp

# use 0 도 가능

 

 

2. 모듈 옵션 설정하기

 

포트 스캔을 실행하기 전에 몇 가지 필수 옵션을 설정해야 한다. 

show options 명령어를 사용하면 모듈에서 설정 가능한 옵션들과 각 옵션이 필수(required)인지 여부를 확인할 수 있다. 

 

msf6 auxiliary(scanner/portscan/tcp) > show options

Module options (auxiliary/scanner/portscan/tcp):

   Name         Current Setting  Required  Description
   ----         ---------------  --------  -----------
   CONCURRENCY  10               yes       The number of concurrent ports t
                                           o check per host
   DELAY        0                yes       The delay between connections, p
                                           er thread, in milliseconds
   JITTER       0                yes       The delay jitter factor (maximum
                                            value by which to +/- DELAY) in
                                            milliseconds.
   PORTS        1-10000          yes       Ports to scan (e.g. 22-25,80,110
                                           -900)
   RHOSTS                        yes       The target host(s), see https://
                                           docs.metasploit.com/docs/using-m
                                           etasploit/basics/using-metasploi
                                           t.html
   THREADS      1                yes       The number of concurrent threads
                                            (max one per host)
   TIMEOUT      1000             yes       The socket connect timeout in mi
                                           lliseconds


View the full module info with the info, or info -d command.

 

이때, required 항목이 yes로 되어있는 옵션은 반드시 설정해주어야 하며, 그렇지 않으면 모듈이 정상적으로 동작하지 않는다. 

 

1. RHOSTS 설정하기

RHOSTS스캔 대상 IP 주소를 지정하는 옵션이다. 

이번 실습에서는 내부 네트워크 상의 DVWA 서버의 IP 주소를 대상으로 설정했다. 

 

msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS [공격 대상 IP 주소]

 

2. PORTS 설정하기

PORTS 옵션을 사용하여 스캔할 포트 범위를 설정했다.

이번 실습에서는 0-1023번 포트를 스캔했다. 

 

msf6 auxiliary(scanner/portscan/tcp) > set PORTS 0-1023

 

3. 추가 옵션 설정

THREAD나 CONCURRENCY 등의 옵션을 조정하여 스캔 성능을 최적화할 수 있다.
예를 들어, 스캔 성능을 높이기 위해 CONCURRENCY 값을 10으로 설정했다. 

 

msf6 auxiliary(scanner/portscan/tcp) > set CONCURRENCY 10

 

 

 

3. 포트 스캔 실행하기

 

모든 옵션을 설정한 후, exploit 명령어로 포트 스캔을 실행했다. 

 

msf6 auxiliary(scanner/portscan/tcp) > exploit -j

# -j 옵션을 추가하여 exploit 도중에 다른 작업을 동시에 할 수 있게 설정하였다. (백그라운드 모드)

 

 

실행 결과, 지정한 IP주소의 25,22,23,53,80,111,139,445,512,513,514 포트가 열린 상태로 확인되었다. 

 

4. 실습 요약

  • 메타스플로잇을 사용하여 특정 IP의 열린 포트를 스캔했다. 
  • auxiliary/scanner/portscan/tcp 모듈을 사용하여 포트 범위를 설정하고, 스캔 결과를 확인했다. 
  • 실습을 통해 네트워크 보안에서 포트 스캔이 중요한 역할을 한다는 것을 다시 한번 깨달았다. 

 

6-2) HTTP 버젼 탐지를 통한 서비스 정보 확인하기 

 

메타스플로잇을 이용하여 포트 스캔을 진행한 후, 80번 포트가 열려 있음을 확인했다. 

이번에는 auxiliary/scanner/http/http_version 모듈을 사용하여 HTTP 서비스의 버전을 확인해 볼 것이다. 

이 모듈은 특정 서버의 HTTP 버전을 감지할 수 있는 기능을 제공한다. 

 

1. HTTP 버젼 탐지 모듈 로드하기

 

1. 모듈 검색 및 선택하기

 

HTTP 버젼 탐지를 위한 모듈을 검색하고, 해당 모듈을 사용하기 위해 use 명령어로 로드했다. 

 

msf6 > search http_version

 

 

검색 결과로 auxiliary/scanner/http/http_version 모듈을 확인하고, use 0 명령어로 해당 모듈을 로드했다. 

 

msf6 > use 0

 

 

2. 옵션 설정하기

 

show options 명령어로 필요한 옵션들을 확인하고, RHOSTS를 설정했다. 

 

 

 

2. HTTP 버젼 탐지 실행하기

 

모든 옵션을 설정한 뒤, exploit 명령어를 사용하여 HTTP 버젼 탐지를 실행했다. 

실행 결과, 대상 서버의 HTTP 서비스 버젼 정보가 출력되었다. 

 

 

결과를 보면 공격 대상 IP의 80번 포트에서 Apache/2.2.8(Ubuntu) 서버가 동작 중이며, PHP/5.2.4-2 ubuntu5.10 환경에서 운영되고 있음을 확인할 수 있었다. 

이는 서버에서 제공하는 HTTP 서비스의 상세 버젼 정보로, 해당 버젼에 존재하는 알려진 취약점(CVE)을 조사하거나 공격 벡터를 탐색하는데 활용되는 매우 중요한 정보이다.

 

이처럼 서버의 구성 요소들이 외부에 얼마나 노출되어 있는지를 파악하고 정보 수집 단계의 중요성을 더 느낄 수 있었다. 

 


 

6-3) http_crawler 모듈을 이용한 웹 크롤링 실습하기

 

이번에는 메타스플로잇의 auxiliary/scanner/http/crawler 모듈을 활용하여 서버의 구조를 파악하기 위한 크롤링 작업을 진행했다. 

이 모듈은 지정된 URL을 시작점으로 하여 내부 링크들을 따라가며 웹 페이지들을 자동으로 수집하는 기능을 제공한다. 

 

1. 모듈 선택 및 옵션 설정 

 

먼저 크롤링에 사용할 모듈을 검색하고 선택했다. 

msf6 > search crawler

Matching Modules
================

   #  Name                                     Disclosure Date  Rank    Check  Description
   -  ----                                     ---------------  ----    -----  -----------
   0  auxiliary/crawler/msfcrawler             .                normal  No     Metasploit Web Crawler
   1  exploit/windows/mssql/mssql_linkcrawler  2000-01-01       great   No     Microsoft SQL Server Database Link Crawling Command Execution
   2  auxiliary/scanner/http/crawler           .                normal  No     Web Site Crawler


Interact with a module by name or index. For example info 2, use 2 or use auxiliary/scanner/http/crawler

msf6 > use 2

 

 

 

 

show options 명령어를 사용하여 옵션들을 확인할 수 있었다. 

msf6 auxiliary(scanner/http/crawler) > show options

Module options (auxiliary/scanner/http/crawler):

   Name          Current Setting  Required  Description
   ----          ---------------  --------  -----------
   DOMAIN        WORKSTATION      yes       The domain to use for windows a
                                            uthentication
   HttpPassword                   no        The HTTP password to specify fo
                                            r authentication
   HttpUsername                   no        The HTTP username to specify fo
                                            r authentication
   MAX_MINUTES   5                yes       The maximum number of minutes t
                                            o spend on each URL
   MAX_PAGES     500              yes       The maximum number of pages to
                                            crawl per URL
   MAX_THREADS   4                yes       The maximum number of concurren
                                            t requests
   Proxies                        no        A proxy chain of format type:ho
                                            st:port[,type:host:port][...]
   RHOSTS                         yes       The target host(s), see https:/
                                            /docs.metasploit.com/docs/using
                                            -metasploit/basics/using-metasp
                                            loit.html
   RPORT         80               yes       The target port
   SSL           false            no        Negotiate SSL/TLS for outgoing
                                            connections
   URI           /                yes       The starting page to crawl
   VHOST                          no        HTTP server virtual host


View the full module info with the info, or info -d command.

 

이제 RHOSTS공격 대상 IP로 설정하고 exploit -j를 이용해 공격해 보았다. 

 

msf6 auxiliary(scanner/http/crawler) > set RHOSTS [공격 대상 IP 주소]
msf6 auxiliary(scanner/http/crawler) > exploit -j 

# -j 옵션 줘서 백그라운드에서 실행하게 하였다.

 

 

 

크롤러를 실행한 결과 유의미한 URL들이 발견되었다. 

해당 결과에는 보안상 민감한 부분을 포함하고 있어 모두 모자이크 처리하고 말로 설명해 보겠다. 

 

먼저 결과에서 HTTP 상태 코드 (200,302,403,404) 들을 확인할 수 있었는데 이는 각각 다른 의미를 가지며, 이를 해석하는 것은 웹 취약점 진단과 정보 수집 단계에서 매우 중요하다. 

각 코드가 가진 의미와 주의 깊게 봐야 할 이유에 대해 아래에서 정리해 보겠다. 

 

1. 200 OK

  • 의미 : 요청한 페이지가 정상적으로 존재하며 응답을 반환했다는 뜻이다. 
  • 실무 활용 
    • 해당 경로에 실제 파일이나 디렉터리가 존재함을 의미하므로, 취약점이 존재할 가능성이 있다. 
    • /test/, /dev/, /dvwa/, /phpMyAdmin/, /mutillidae/ 등은 웹쉘 업로드, 인증 우회, SQL Injection 등의 공격 포인트로 발전할 수 있다.

2. 302 Found (Redirect)

  • 의미 : 클라이언트가 요청한 자원이 다른 위치로 이동됐음을 의미한다. 
  • 실무 활용
    • 예를 들어, /dvwa/에서 302 => login.php로 리다이렉션 된 것은 인증을 요구하는 페이지임을 나타낸다. 
    • 인증 우회 가능성이나 로그인 후에 접근 가능한 관리자 기능의 존재 여부 등을 판단할 수 있다. 

3. 403 Forbidden

  • 의미 : 서버에 해당 경로가 존재하지만 접근 권한이 없어 차단된 경우이다. 
  • 실무 활용
    • 존재는 하지만 접근이 막혀 있다는 뜻이므로, 디렉터리 브라우징 차단, 인증 페이지 또는 WAF 차단 흔적일 수도 있다. 
    • 우회 가능한 기법(Referer 변조, User-Agent 조작, 인증 우회 등)을 시도할 여지가 있다. 
    • 디버깅이나 내부용으로 설정된 중요한 경로일 확률이 높다. 

4. 404 Not Found

  • 의미 : 요청한 경로나 파일이 존재하지 않음을 의미한다. 
  • 실무 활용
    • 자동 크롤러가 사전 정의된 경로 사전을 기반으로 요청한 결과일 수 있다. 
    • 일반적으로 공격 포인트는 아니지만 로그가 남을 수 있어 로그 기반 탐지 우회나 디렉터리 구조를 추측하는데 참고될 수 있다. 

이처럼 200,302,403은 특히 중요하게 분석 대상이 되는 경로이다.

 

2.  웹 공격 특화 플러그인 - wmap

 

먼저 load -l를 통해 로드 가능한 모든 플러그인 목록을 확인했다. 

 

msf6 auxiliary(scanner/http/crawler) > load -l
[*] Available Framework plugins:
    * aggregator
    * alias
    * auto_add_route
    * beholder
    * besecure
    * capture
    * db_credcollect
    * db_tracker
    * event_tester
    * ffautoregen
    * fzuse
    * ips_filter
    * lab
    * libnotify
    * msfd
    * msgrpc
    * nessus
    * nexpose
    * openvas
    * pcap_log
    * request
    * rssfeed
    * sample
    * session_notifier
    * session_tagger
    * socket_logger
    * sounds
    * sqlmap
    * thread
    * token_adduser
    * token_hunter
    * wiki
    * wmap

 

이 중에서 웹 공격 특화 플러그인 wmap을 로드해 보겠다. 

이를 통해 웹 애플리케이션 스캐닝이나 자동화된 취약점 분석이 가능해진다. 

 

 

wmap 사용법을 확인해 보았다. 

이 중에서 wmap_sites를 실습해 보았다. 

wmap_sites -l

 

이 명령어를 사용하면 Site ID, Virtual Host, URL, 몇 가지 속성 정보를 확인할 수 있다. 

이 정보를 기반으로 이후 wmap_run 등을 사용해 등록된 사이트에 대해 스캐닝을 진행할 수 있다. 

 


 

6-4) 이메일 수집하기 - 특정 도메인에 대해 이메일 주소 수집

 

1. 이메일 수집을 위한 search_email_collector 모듈을 검색한다.

 

 

2. 사용할 모듈인 auxiliary/gather/search_email_collector 모듈을 선택한다. 

use 3

 

 

 

3. 도메인 설정하기

DOMAIN 옵션에 이메일을 수집할 대상 도메인을 설정한다. 

 

set DOMAIN [도메인]

 

4. 결과 파일 지정하기

msf6 auxiliary(gather/search_email_collector) > set OUTFILE email.txt

 

5. 모듈 실행하기

exploit -j

 

실행 결과, 해당 도메인에 대한 이메일 주소를 검색하고, 발견된 이메일 주소들을 email.txt에 저장한다. 

이 실습 같은 경우는 로컬 IP의 경우는 이메일 수집이 불가하고 공개 도메인일 경우 수집이 가능하다. 

그리고 불법적인 사이트의 경우 경찰의 수사를 피하기 위해 이메일을 등록하지 않을 가능성이 크다. 

 


 

6-5) MailGra 도구를 활용한 이메일 수집 실습

 

 

※ 법적 주의사항

해당 실습은 본인 소유 블로그 (https://ahhyun98.tistory.com/)를 대상으로 한 보안 테스트이다.
MailGrab은 공개된 웹페이지에서만 이메일을 수집하며, 학습 및 실습 목적 외의 사용은 법적 문제가 될 수 있다.
개인정보 보호를 위해 일부 모자이크 처리하였다. 

 

 

추가적인 도구로 Github에서 제공하는 MailGra를 사용해 보자. 

MailGra는 구글, 빙, DuckDuckGo 등 다양한 검색 엔진을 활용해 공개된 이메일 주소를 수집해 주는 Python 기반의 도구이다. 

 

1. 가상환경 생성하고 설치하기

 

MailGra는 여러 패키지를 필요로 하므로, 가상환경을 구성한 뒤 설치하는 것을 권장한다. 

가상환경을 사용하면 시스템 전체 Python 환경과 격리된 환경에서 안전하게 테스트 가능하다. 

 

# 1. 가상환경 생성 (파일명은 원하는대로 생성)
python3 -m venv mailgrab_env

# 2. 가상환경 활성화
source mailgrab_env/bin/activate

# 3. MailGrab 다운로드 및 이동
git clone https://github.com/OCEANOFANYTHING/MailGrab.git
cd MailGrab

 

 

 

2. 필요한 라이브러리 설치, 오류 수정, 실행하기

 

 

=> 파이썬 파일을 실행하면 오류가 발생하는 것을 볼 수 있다. 

 

SyntaxWarning: invalid escape sequence '\_'

=> 이건 문자열 내의 백슬래시(\)를 이스케이프 하지 않아서 생긴 경고로 코드에서 "\_" 대신 r"\_" 또는 "\\_" 형식으로 고치면 해결된다. 

 

gedit MailGrab.py

 

 

 고치고 나서 실행해 보면 아까 에러 하나가 없어진 것을 볼 수 있다. 

다음 에러는 ModuleNotFoundError: No module named 'bs4'으로 MailGrab이 동작하는 데 필요한 패키지인 BeautifulSoup4 (bs4)가 설치되어있지 않아서 생기는 오류이다. 

 

 

BeautifulSoup4를 설치해 주고 다시 실행해 보았다. 

 

 

또 다른 에러가 발생하였다. 

필요한 라이브러리들이 설치되어 있지 않아서 뜨는 오류이다. 

 

pip install -r requirements.txt

 

이 명령어로 한 번에 설치도 가능하지만 일부 라이브러리 간 충돌로 설치 시 오류가 발생하는 경우가 있다. 

이 경우는 오류가 뜨는 핵심 라이브러리들을 수동 설치해줘야 한다. 

 

나 같은 경우는 requirements.txt로 설치 시 충돌이 발생하여 전부 수동으로 설치해 주었다. 

 

3. 파이썬 파일 실행하기

 

전부 설치해 주고 다시 파이썬 파일을 실행해 보았다. 

 

 

이제는 정상적으로 작동하는 것을 확인할 수 있다. 

 

내 블로그 주소를 넣고 10개의 내부 페이지를 자동 순회하면서 분석을 시도해 보았다. 

 

 

분석 결과, 내부 URL 크롤링을 확인하였고 수집 가능한 이메일은 발견되지 않았다. 

이 실습은 도구의 동작을 이해하고 기능을 테스트해보기 위한 목적이며, 타인의 웹사이트에 무단으로 적용할 경우 법적 문제가 발생할 수 있으므로 주의해야 한다. 

 


7. 마무리

이번 포스팅에서는 Metasploit의 기본적인 정보 수집 기능을 활용하여 target 시스템의 포트를 스캔하고, 취약점을 검색하는 방법을 실습해 보았다. 단순한 명령어 나열이 아닌, 각각의 기능이 어떤 역할을 하는지 이해하는 데 중점을 두었다.

특히 use, set, exploit 같은 명령어를 직접 써보면서, Metasploit이 단순히 공격만 하는 도구가 아니라 정보 수집도 체계적으로 도와주는 프레임워크라는 것을 알 수 있었다. 

 


8. 다음 포스팅 

다음번 포스팅에서는 msfvenom을 활용하여 페이로드를 생성해 보고 이를 target에 심어서 컴퓨터 자체를 제어하는 Meterpreter 세션 확보 실습을 진행할 것이다. 이를 통해 정보 수집을 넘어 실질적인 침투 테스트 과정으로 확장해 볼 생각이다. 

 

 

다음 관련글 보러가기 

 

[모의해킹] msfvenom을 활용한 악성코드 생성 및 메타스플로잇 연동 실습

이번 글에서는 메타스플로잇의 msfvenom 모듈을 활용하여 Windows용 악성코드를 제작하고, 메타스플로잇 콘솔(msfconsole)에서 해당 악성코드와 통신을 연결하는 실습을 진행하였다. 이 과정은 모의해

ahhyun98.tistory.com

 

 

 

 

이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.

모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.