메타스플로잇(Metasploit)의 개념과 메타스플로잇을 활용한 정보 수집 실습
정보보안 분야에서 취약점 분석과 침투 테스트는 필수적인 기술이다.
그중 메타스플로잇(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
이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.
모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.