본문 바로가기

해킹-보안

메타스플로잇(Metasploit)을 활용한 취약점 공격

반응형

이 내용을 악용하여 다른 시스템에 적용하지 않습니다.
그로 인한 법적인 책임은 본인에게 있습니다.
자신이 운영하는 시스템의 보안 취약점을 찾아내는 용도로만 사용하세요.




ி 용어 정리



Metasploit


Metasploit은 해킹을 간단하게 하도록 도와주는 모의 해킹 테스트 도구이다.
보안 취약점을 찾고 해킹을 시뮬레이션할 때 사용한다.
오픈 소스 프레임워크이며 최신 취약점을 빠르게 업데이트해주는 장점이 있다.


metasploitable

Metasploitable은 보안 교육을 목적으로 만들어진 해킹 공격에 취약한 가상머신이다.
침투 테스트 기술을 사용하기 유리한 환경으로 구성되어 있어서 다양한 해킹 실습을 진행할 수 있다.
아래 사이트에서 메타스플로잇 테이블을 다운받을 수 있다.
https://sourceforge.net/projects/metasploitable/
계정은 아이디와 비밀번호 모두 msfadmin이다.

exploit

보안 취약점을 이용해서 공격자의 의도된 동작을 수행하도록 만들어진 명령이다.
익스플로잇은 공격 행위로서 사용되는 수단을 말하기도 한다.
그 수단이 명령이 될 수도 있고 스크립트 혹은 프로그램이 될 수도 있다.
주로 시스템의 버그나 응용 프로그램 취약점 등 설계상 결함으로 생긴 문제를 이용한다.

Module

MSF(메타스플로잇)에서 사용하는 소프트웨어의 한 부분이다.

Shellcode

셸코드는 대상 시스템에서 실행할 수 있는 명령어 코드의 집합이다.
셸코드는 어셈블리/기계어로 작성된 작은 크기의 코드들이다.
코드들은 다음과 같이 표현된다.
\x31\xc0\xb0\x31\xcd\x80...

Payload

대상 시스템에 실행시키려고 하는 공격 코드를 말한다.

Meterpreter

미터프리터(Meterpreter)는 메타스플로잇에서 제공하는 세션 연결 기능이다.
해킹 공격이 성공하면 원격에서 대상 시스템의 내부 정보를 수집하고 원격으로 명령을 수행할 수 있다.
미터프리터는 DLL 인젝션을 사용하여 실행 중인 다른 프로세스에 특정 DLL 파일을 강제로 주입한다.
또한 메모리를 이용하여 동작하기 때문에 디스크에도 흔적이 남지않아 공격자를 추적하기 어렵다.



Nmap


Nmap은 호스트나 서비스 포트 정보를 수집하는 보안 스캐너 프로그램이다.
이 도구를 사용하면 특정 네트워크 대역의 호스트를 스캔하여 사용중인 호스트를 조회할 수 있고
운영중인 서버에서 사용하는 포트를 알아낼 수 있다.
Nmap 사용 시 주의할 점은 실제 사이트를 대상으로 하면 해킹 시도로 간주하여 

법적 책임을 물게 될수도 있다.  따라서 자기가 구축한 환경에서만 실습을 진행해야 한다.



ி 메타스플로잇 사용법


메타스플로잇 실습을 하기 위해 칼리리눅스와 메타스플로잇테이블을 준비한다.
필자는 칼리리눅스 공식 홈페이지에서 CD 설치가 필요없는 VM 버전을 다운받았으며
네트워크 구성 방식은 브릿지로 설정하였다.


MSF 업데이트


칼리리눅스에서 메타스플로잇은 기본으로 깔려있지만
원활한 실습 진행을 위해 최신 버전으로 받도록 아래 명령을 수행한다.

apt-get update

최신 버전으로 업데이트할 패키지들을 확인한다.

apt-get upgrade

업데이트할 패키지들과 현재 존재하는 패키지들을 비교하며 업데이트를 수행한다.

apt install metasploit-framework




MSF DB 연동



service postgresql start

메타스플로잇 DB 서비스를 실행한다.

msfdb init

메타스플로잇 DB를 생성한다.

msfconsole

메타스플로잇 프레임워크를 실행한다.

※ 관련된 명령어
help msf 콘솔에서 사용 가능한 명령어를 보여준다.
search 사용 가능한 모듈 정보를 검색한다.
use 특정 모듈을 사용한다고 정의한다.
info 모듈의 세부 정보를 확인한다.
set 모듈 사용에 필요한 정보를 설정한다.
show 모듈을 사용하기 위해 필요한 설정 내용을 확인한다.
exploit 모듈을 실행한다.
sessions 세션 정보를 보여준다.


msfconsole을 실행한 후 db_status 명령으로 postgresql과의 연결상태를 확인해준다.



MSF 모듈 사용


tomcat에 일반 사용자가 관리자 권한으로 접속하는 시나리오를 진행한다.
(tomcat은 metasploitable에 구동중인 웹서버이다)


MSF 공격 순서는 아래와 같다.
msfconsole -> search -> use -> info ->
show options -> set -> exploit -> meterpreter
우선 nmap으로 상대방의 tomcat 포트 번호를 알아내보자.

nmap

nmap -sV [타겟IP] 
V 옵션은 사용중인 서비스의 버전까지 조회해준다.

tomcat의 포트 번호는 8180으로 확인된다.
이제 해당 포트를 통하여 exploit 하는 과정을 알아보겠다.


search

계정을 알아내기 위해 사용 가능한 모듈이 있는지 검색한다.
톰캣 관련 모듈을 조회할 것이므로 아래의 명령을 수행한다.
search tomcat

톰캣 관련 모듈을 찾아보니
8번 항목에 tomcat_mgr_login이라는 모듈이 눈에 띈다.
설명을 읽어보니 톰캣 관리자 로그인 유틸리티라고 한다.
느낌상 저 모듈이 관리자 로그인 계정을 획득하기 위한 유틸리티일 확률이 높아보인다.
해당 모듈을 사용하여 exploit을 시도해보겠다.
참고로 모듈 조회시 나오는 RANK라는 컬럼은 exploit의 성공률을 나타낸다.



use

8번 항목의 모듈명을 복사한 뒤에 use 명령어에 붙여서 실행시킨다.
use auxiliary/scanner/http/tomcat_mgr_login

해당 모듈을 사용한다는 의미에서 모듈 이름으로 프롬프트가 붙게된다.
auxiliary: 페이로드를 필요로 하지 않는 공격 또는 정보 수집을 목적으로 하는 코드의 모음이다.
주로 스캔이나 정보수집용으로 많이 사용한다.


set

exploit을 수행할 타겟 서버의 ip와 포트 번호 등을 설정해주어야 한다.
set RHOSTS [타겟IP]
set RPORT [타겟포트]

Required가 YES로 되어있는데 Current setting에 값이 없다면 필히 설정을 해줘야한다.


exploit

타겟 정보를 모두 설정하였다면 exploit 명령을 수행한다.

해당 모듈이 실행될 때 패스워드 사전 공격 방식을 통해서 로그인을 시도하고 있다.
중간에 로그인 성공 메시지가 뜬 부분의 계정으로 로그인을 해보자.

exploit하여 나온 계정인 tomcat/tomcat으로 로그인을 해보니 

관리자 계정으로 성공적으로 로그인이 되었다.



payloads

아까 알아낸 관리자 계정을 이용하여 파일 업로드 취약점으로
상대의 셸(shell)을 획득하고 원격에서 명령을 실행해보자.

사용할 모듈은 파일 업로드 취약점 공격 모듈인 tomcat_mgr_deploy이다.
(톰캣 서버에 war 확장자 파일이 올라가야하는지 먼저 확인해 보아야 한다)
HttpPassword, HttpUsername에 관리자 계정과 기본적인 네트워크 정보를 넣어준다.


이제 payloads를 설정할 차례이다.
아래 명령으로 어떤 페이로드가 있는지 검색해본다.
show payloads

java/shell/reverse_tcp java/shell/bind_tcp 두 페이로드의 차이점은
reverse 방식은 피해자가 공격자 포트로 연결해주는 것이고
bind는 공격자가 피해자 포트로 연결하는 것이다.
reverse가 가능한 이유는 공격자는 특정 포트를 열고 기다리면서
피해자 서버에다가 내 포트로 들어오게 하는 프로그램을 깔아서 실행해주기 때문이다.

필자는 exploit할 페이로드를 reverse_tcp로 선택하겠다.



Meterpreter


exploit을 수행한 결과 미터프리터가 연결된 것을 확인할 수 있다.
업로드된 War 확장자 파일은 reverse 공격을 가능하게 해주는 파일이다.
(피해지에 생성된 War 파일이 실행되면서 공격지 포트로 접속하게 된다)
가능한 원격 명령으로 ifconfig, sysinfo, cat 등이 있으며
입력 가능한 명령어를 추가로 알아보고 싶다면 help를 입력한다.

여기까지가 exploit 과정의 끝이다.

  
마지막으로.. 버전별 취약점을 자동으로 찾게 해주는 searchsploit과

일반 셸을 미터프리터 셸로 바꿔주는 모듈도 있으니 참고하길 바란다.

searchsploit을 사용하기 전에 아래 명령을 통해 이용 중인 서비스 포트와 버전을 xml 파일로 저장하고 실행한다.
"nmap -sV ip -oX result.xml"
searchsploit --nmap result.xml -w
자동화 도구를 통해 조회 안되는 모듈이 존재하니 도구를 너무 믿지말것!                                          미터프리터 변환 모듈 : multi/manage/shell_to_meterpreter                 




다음 실습

메타스플로잇 피보팅 공격



반응형