kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

Cyber Security

Metasploit & Searchsploit 스터디

까마기 2017. 5. 31. 09:19
728x90
반응형

1. 개요 및 용어정리

1) 익스플로잇

- 목표 시스템에 페이로드를 올릴 수 있는 코드의 집합체

- 익스플로잇은(exploit)은 공격자나 모의 해킹 전문가가 시스템, 애플리케이션, 서비스등의 취약점을 악용하는 방법이다. 공격자는 개발자가 결코 의도하지 않은 결과를 이용한 익스플로잇으로 시스템을 공격한다. 익스플로잇에는 보통 버퍼 오버오버플로우, 웹 애플리케이션 취약점(SQL 인젝션 등), 설정 오류 등이 있다.

- 시스템, 애플리케이션, 서비스 등의 취약점을 공격하는 방법 또는 코드

 

2) 익스플로이테이션(exploitation),공격하기 : 익스플로잇을 하는 행위

ex) 라이터(익스플로잇)를 가지고 불을 지르는 행위

- 모든 정보를 수집하고, 포트를 스캔하고, 취약점까지 검토를 완료한 다음에 비로소 허가 없이 목표 서버에 접근하거나 원격으로 코드를 실행하는 순간을 말한다.

- 네트워크 공격의 목표 중 하나는 목표 컴퓨터(보통 웹 서버)에 관리자 수준의 권한을 얻어서 프로그램을 실행시키는 것

- 위의 행동 후에는 해당 컴퓨터를 완전히 장악한 것이므로 사용자나 관리자 추가, 해킹 도구 및 백도어 설치등의 행위를 수행한다.

 

3) 후속 공격(post exploitation) : 익스플로잇이 성공한 후 수행하는 공격

 

4) 취약점(vulnerability)

- 시스템 또는 소프트웨어에 존재하는 결함

- 목표 시스템의 잠재적인 약점, 패치를 하지 않았거나 알려진 약한 함수를 사용하는 경우 (C언어의 strcpy 같이), 구현이 충실하지 않았거나 또는 (SQL과 같이) 컴파일된 언어를 잘못 사용할 경우, 혹은 해커가 노릴만한 다른 잠재적인 문제점을 의미한다.

 

5) 페이로드(Payload)

 

- 페이로드(Payload)는 시스템에 실행시키고자 하는 코드이며, 프레임워크에 의해 선택되고 전달된다. 예를 들어 리버스 쉘(Reverse Shell)은 윈도우 명령 프롬프트로 대상 시스템에서 공격자에게 역으로 접속을 시도하는 페이로드이다. 반면 바인드 쉘(bind Shell)은 대상 시스템의 응답 포트에 명령 프롬프트를 바인드해 공격자가 접속할 수 있게 유도하는 페이로드이다.

- 페이로드는 대상 운영체제에서 실행할 수 있는 몇 가지 명령으로만 구성된 매우 간단한 형태일 수 있다.

 (쉘코드, 최종 공격 목적코드)

- 익스플로잇 최후의 목표로서, 목표 시스템에서 실행되는 악성코드이다.

- 몇 가지 유명한 페이로드 중에는 윈도우, 리눅스 쉘 또는 Reverse Shell, 원격 데스크톰 접속 허용하는 VNC 주입, 관리자 임의 추가 등이 있다.

 

6) 쉘코드(Shellcode)

 

쉘코드(Shellcode)는 공격을 수행할 때 페이로드로 사용되는 명령 집합이다. 쉘코드는 보통 어셈블리 언어로 작성하는데, 연속된 명령을 대상 시스템에서 실행한 후 명령쉘이나 미터프리터 쉘(meterpreter Shell)을 얻는다.

 

7) 모듈(Module)

 

여기서 설명하는 모듈(Module)은 메타스플로잇 프레임워크에서 사용되는 소프트웨어의 한 부분이다. 가끔 공격을 수행하는 소프트웨어 구성 요소로 익스플로잇 모듈이 필요한 경우가 있다. 이런 호환 모듈은 프레임워크를 강력하게 만드는 핵심이라 할 수 있다.

 Ruby언어에서 말하는 모듈, MSF에서 사용하는 모듈

 

8) 리스너(Listener)

 

리스너는 연결 요청을 기다리는 메타스플로잇의 구성요소이다. 예를 들어 대상 시스템에 공격을 성공시킨 후 인터넷을 통해 공격한 시스템을 호출하게 된다. 리스너는 공격 시스템에서 악의적인 시스템 연결 요청을 기다리고, 그 연결을 처리한다.

 연결 요청을 기다릴수 있도록 해주는 기능

 

9) 세션(session) : MSF와 공격 대상 시스템 사이에 맺은 연결 채널

 

10) 제로데이(Zero-Day) : 아직 알려지지 않은 새로운 취약점

 

11) PoC(Proof of Concept) : 취약점을 증명하기 위해 만들어진 증명 코드

2. Metasploit 이란?

- HD Moore가 만든 익스플로잇 프레임워크로서, 오픈소스로 만든 공격 도구 중 저명한 도구.

- Metasploit Framework (MSF 또는 msf)는 구조화된 방법으로 시스템을 뚫고 들어가서 사용자 집단 간에 침투 경험을 연습, 적용, 공유할 수 있게 해준다.

 

* Metasploit 기초

다음과 같이 7개의 명령을 사용하여 exploit을 완수한다.

 

1) 탐색(search) : Nessus 결과에 보고된 CVE 식별자를 근거로 MSF 데이터베이스에서 관련된 침투 방법을 찾아본다.

2) 사용(use) : CVE 식별자와 가장 잘 일치하는 공격 방법을 선택한다.

3) 페이로드 보기(show payloads) : 선택된 방법에 가능한 페이로드를 검토한다.

4) 페이로드 설정(set payload) : 선택된 공격을 위하여 희망하는 페이로드를 선정한다.

5) 옵션 보기(show options) : 선택된 페이로드의 일부로서 반드시 정해야만 하는 옵션을 검토한다.

6) 옵션 설정(set options) : 성공하려면 페이로드에 꼭 있어야만 하는 옵션 값을 할당한다.

7) 익스플로잇(exploit) : 목표 시스템에 잘 만들어진 익스플로잇을 전송한다.

 

3. 메타스플로잇 시작 및 업데이트

save image

->kali rolling 버전

 

save image

 

# apt-get update && upgrade && dist-upgrade && msfupdate

save image

 

* msfupdate 명령은 전체 프레임워크를 업데이트하기 떄문에 늘 가장 최신 버전의 Metasploit을 유지할 수 있다.

 

apt update && apt -y install exploitdb

apt update && apt -y dist-upgrade

* 메타스플로잇 시작

위의 msfconsole 명령을 실행하면 'No database support'라는 경고 메세지가 뜬다.

4. Postgresql DB 연결

Kali 2.0에는 기본적으로 postgreSQL 서버가 내재되어 있다. 보통 메타스플로잇과 연동하기 위한 용도로 사용한다.

예를 들어 msfconsole에서 공격 대상 서버로 스캐닝 등을 수행할 경우 해당 결과를 자동으로 postgreSQL 서버에 저장시키는 용도이다. 이는 나중에 필요할 때 db 내용만 조회하면 되기 때문에 시간을 줄일 수 있는 효과가 있다.

# service postgresql start

# update-rc.d postgresql enable

위 처럼 부팅 후 자동 시작 설정도 해준다.

Kali 1.0에서는 service metasploit start를 통해 재부팅 후 서비스를 시작했지만 2.0 이후 부터는 'msfdb init' 명령어를 입력해야 한다. 해당 명령을 실행한 적이 있으면 이미 설정되어 있기 때문에 초기화 과정은 스킵된다.

재설정을 하기 위해서는 'msfdb reinit' 명령어를 사용하거나 'msfdb delete -> msfdb init' 명령어 2개를 사용하면 된다.

(참고 : https://bob3rdnewbie.tistory.com/191)

 

다시 msfconsole 시작한다. 경고메세지 없이 시작되는 것을 확인할 수 있다.

 

- Postgresql db 연동 상태 조회

msf> db_status

 

- db_nmap 명령을 이용한 스캔 시작

save image

 

* 참고 : port scan 명령어 중 db_nmap

 

- msf > db_nmap -h  (관련 옵션들이 출력된다.)

- 여기서 위에서 쓰인 옵션에 대해서 다음과 같이 표현하고 있다.

 

SCAN TECHNIQUES:

[*] -sS/sT/sA/sW/sM : TCP SYN/Connect()/ACK/Window/Maimon scans

 

-A: Enable OS detection, version detection, script scanning, and traceroute

 

-p <port ranges>: Only scan specified ports

[*] Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9

 

- hosts 명령으로 타겟 호스트 조회

-> nmap을 이용한 스캐닝 이후 해당 타겟 호스트는 자동으로 hosts 파일에 저장된다.

save image

 

5. 탐색

Nessus 및 기타 도구로 찾은 CVE 식별자와 일치하는 Metasploit의 가용 공격지점을 탐색한다. 본 포스팅에서는 'CVE 2009-4484'를 찾아본다.

* CVE 2009-4494 : 해당 취약점은 웹 서버에서 동작하는 Mysql에 대해 다중 스택 기반의 버퍼 오버플로우에 취약한 버전을 갖고 있는 경우를 목표로 삼는다. 이 취약점을 활용하면 공격자는 원격지에서 임의의 코드를 실행하거나 서비스 거부를 초래할 수 있다.

 

msf > search 2009-4484

'Rank' (공격 순위)를 보고 공격 방법을 선택 하는 것도 방법이다. 

Rank는 7가지 순위로 매겨진다.

탁월(excellent)

훌륭함(great)

좋음(good)

보통(normal)

평균(average)

낮음(low)

수동(manual)

 

낮은 단계의 공격은 선정된 페이로드를 올리기보다 목표 시스템을 부수는데 더 가깝다.(?)

앞의 결과에선 good 등급으로 나왓는데, 이를 이용하면 목표 시스템에서 원격으로 코드를 실행할 수 있다. 이 정도면 중간 등급이고 대개의 취약점은 탁월 또는 훌륭한 등급을 갖는다.

 

6. 사용

- Metasploit에서 공격할 수 있는 모든 방법을 얻은 다음, 목표 시스템에 맞는 최고의 방법을 사용한다.

msf > use exploit/linux/mysql/mysql_yassl_getname

7. 페이로드 보기

msf > show payloads

공격 가능한 모든 페이로드 확인.

8. 페이로드 설정

주어진 취약저을 공격하기 위해 페이로드 목록을 바탕으로 사용할 페이로드를 선택한다. 

예를 들어 'Reverse Shell'을 페이로드로 사용하면 목표 시스템에서 거꾸로 접속하게 하여 침임탐지 시스템이 발견하기 어려워지는 장점이 있다.

명령은 다음과 같다.

msf > set payload [페이로드 명]

9 옵션 보기

- 각각의 공격 방법과 페이로드가 성공하려면 구체적으로 설정해줘야 하는 옵션이 있다.

- 목표 시스템고 공격하는 시스템의 IP주소이다.

목표 시스템(원격 호스트) : RHOST

공격 대상 시스템(자체 호스트로 구분) : LHOST

 

- 다음의 명령을 통해 공격 방법과 페이로드에 대한 자세한 정보를 확인

msf > show options

10. 옵션 설정

- 익스플로잇과 페이로드 옵션 중 기본적으로 빈 칸으로 남겨진 필드에는 값을 입력해야 한다.

- 필드가 비어있을 경우 공격을 성공적으로 완수하기 어렵다.

- 본 테스트에서는 모든 것이 동일 환경이므로 RHOST와 LHOST 모두 '127.0.0.1'로 설정한다.

하지만 실제 상황에서는 두 IP는 명백히 달라질 수 밖에 없다.

- 설정은 다음과 같다.

msf > set RHOST 127.0.0.1

msf > set LHOST 127.0.0.1

show options 명령을 통해 옵션이 정확히 설정되었는지 확인이 가능하다.

 

11. exploit (공격)

- 해당 단계에서는 exploit 명령으로 설정된 공격 방식이 목표지로 전송된다.

- exploit 명령을 실행하였는데, 에러가 발생하였다. 해당 로컬 호스트에서 사용하는 mysql 버전이 다르기 때문임을 추측하여, mysql 버전을 확인해보았다.

- 본 포스팅에서는 exploit 기본 사용 방법에 대해서만 포스팅을 하였다.

 

 

- 공격이 성공하면 터미널에 아래와 같은 메세지가 표시된다.

 

12. exploit-DB 사용법과 Searchsploit 활용

* 참고 : https://www.exploit-db.com/searchsploit/#installkali

 

Offensive Security’s Exploit Database Archive

 

www.exploit-db.com

1) searchsploit 명령어 설치

 

apt update && apt -y install exploitdb

 

2) searchsploit 업데이트

 

3) 2016년 9월 20일 이후 패키지 업데이트 이력이 없을 경우 패키지 업데이트 실행

apt update && apt -y full-upgrade

 

4) searchsploit 사용 예

# searchsploit linux kernel 3.2 --exclude="(PoC)|/dos/"

# searchsploit mariadb

5) exploit-db 정보를 URL로 보기 (-w 옵션)

# searchsploit [검색할 exploit] -w

6) exploit-db를 다운로드 하기 (-m 옵션)

# searchsploit -m [exploit-number]

다운로드 된 exploit 정보 확인하기

# cat /usr/share/exploitdb/38109.pl

 

7) 타이틀 정보로 확인하기

# searchsploit -t [타이틀명]

ex) searchsploit -t window

8) 버전 정보 까지 알고 exploit을 검색하는 것이 효율적이다.

9) 공격코드에 대한 상세 정보 확인하기

ex) # searchsploit [exploit-number] --examine

# searchsploit 38109 --examine

10) nmap 활용하기

 

- 먼저, nmap 스캔을 한 결과를 -oX 옵션을 사용하여 xml파일로 저장한다.

# nmap -sV 127.0.0.1 -oX result.xml

- searchsploit 명령어를 통해 저장된 nmap 스캔 결과 파일을 불러오기 (경로 확인)

- result.xml 결과를 가지고 searchsploit을 실행하여 검사를 하고 버전정보 등 공격코드가 출력된다.

 

# searchsploit --nmap result.xml

 

조금 더 상세히 보기 위해 안내되어 있는 것 처럼 -v 옵션을 주었더니 apache와 mysql 버전정보를 토대로 공격코드가 출력되었다.

 

 

 

 

반응형