본문 바로가기

IT/Security

해킹 프레임워크 메타스플로잇(Metasploit) 사용하기

/* 
written by kaspy (kaspyx@gmail.com)
*/ 


 메타스플로잇 프레임워크는 취약점을 공유하는 사이트로써 취약점 DB에 존재하는 바이너리에 대한 자동화된 공격코드를 제공해줍니다. 따라서 해킹에 대해서 깊은 지식이 없어도 조금의 개념만 익히면 자동화된 공격을 통해 시스템의 권한을 획득하거나, 불법적인 바이러스를 유포하거나 악의적인 공격 또한 할 수 있습니다. 취약점의 종류는 여러 가지가 있지만 대표적으로 버퍼 오버플로우, 웹 취약점, 암호노출 등을 들 수 있습니다.

실제 테스트한 방법은 아래와 같습니다.

1. 메타스플로잇 DB에 존재하는 취약점 바이너리 다운로드
2. 취약점이 있는 바이너리를 가지고 가상의 해킹환경 구축
3. 메타스플로잇 프레임워크를 통한 해킹 시연

1. 메타스플로잇 DB에 존재하는 취약점 바이너리 다운로드

메타스플로잇(http://www.metasploit.com/)에 접속하여 프레임워크를 다운받아 설치하고 Access Metasploit Web UI를 실행해보면 아래와 같은 화면이 나옵니다.




 그럼 실제 공격을 해보기 위해 취약점이 있는 바이너리를 검색해 보겠습니다. 위의 WebUI 메뉴 중에 Modules를 클릭해서 저는 ftp라고 검색해보았습니다.

 취약점이 존재하는 바이너리에 대한 리스트들이 나옵니다. 그 중에 제일 만만할거 같은 2006년도에 발견된 취약점 바이너리인 FreeFtpd 라는 바이너리를 선택해서 정보를 구하고 해당 URL에 들어가서 해당 취약점이 존재하는 바이너리를 다운받았습니다.


2. 취약점이 있는 바이너리를 가지고 가상의 해킹환경 구축

 Server Exploit 이라는 말은 원격 공격 취약점을 종류라는 것이고, 구체적 취약점의 이름은 Key Exchange String Buffer Overflow 라는 취약점이 존재한다는 것을 확인할 수 있습니다. 그리고 VMWare 상에 가상의 서버를 구축하였습니다. (영문판 윈도우 xp sp2환경에서 FreeFtp를 실행)

실제 모의 취약점 환경을 구축해보고 테스트 해보겠습니다.
윈도우 환경에 FreeFtpd 라는 데몬을 돌려서 가상의 취약점을 구축해놓은 상황입니다. 
그럼 메타스플로잇 프레임워크를 통해 공격을 해서 서버의 권한을 얻어보겠습니다. Metasploit Console이라는 프로그램을 실행해주시기 바랍니다. 

3. 메타스플로잇 프레임워크를 통한 해킹 시연

“search” 명령어를 통해 해당 바이너리에 대한 취약점을 검색할 모습입니다. FreeFtpd 에대한 공격 코드는 위에서 보는 것처럼 2개인데, 저는 아래에 있는 
“exploit/windows/ssh/freeftpd_key_exchange” 라는 취약점에 대한 공격 코드를 사용해 보겠습니다.

“use” 라는 명령어를 통해 공격 코드를 제작해보겠습니다. 
공격을 실제 하려면 우선 ① “target”이 지정 되어야 하고, ② “payload” 와 ③ “추가 옵션”을 지정해 줘야 합니다. 여기서 “target” 이라면 실제 공격할 서버의 실행 환경 이해하면 되고, “payload” 라면 실제 공격에 성공했을 때 실행할 특별한 코드로 이해하시면 됩니다. 추가 옵션은 지정한 payload에 따라 다르게 지정해주는 옵션들입니다.

타겟 서버 환경은 영문 버젼의 윈도우 SP0~4 환경이므로 0번을 지정 하였습니다.
그럼 이제 payload를 적용해 보겠습니다. show payloads 라는 명령어를 통해 실제 공격시에 수행할 명령어를 찾아보겠습니다.

 굉장히 많은 payload 코드들이 존재하는데 위에서 하고 싶은 공격 코드를 선택해주면 됩니다. 단순히 메시지 박스를 띄우는 명령어 코드부터 특정 URL에 접속하여 다운로드하고 실행하라는 다양한 명령어 코드들이 존재합니다. 저는 “bind_tcp” 라는 payload를 선택하였습니다. 참고로 bind_tcp (bindshell)라는 payload는 공격시 특정 포트에 백도어를 열어두고 접속하면 쉘 권한을 얻을 수 있는 공격 명령어 코드입니다. 아래와 같이 set 명령어로 payload를 bindshell로 지정해주세요.


\
여기서 보시면 LPORT를 보실 수 있는데 공격했을 때 접속할 포트 번호 그리고 RHOST는 공격할 서버의 아이피 주소를 지정해줘야 함을 알 수 있습니다. LPORT와 RHOST를 지정해보겠습니다.

 이제 공격 코드에 대한 모든 설정이 끝났으면 실제 공격을 수행해야 합니다.

“exploit” 이라는 명령어로 실제 공격을 수행해보겠습니다.

 공격에 성공했을까요?? 실제 bind 쉘이 열려서 해당 서버에 관리자 권한으로 접속되는지 1977 포트로 접속해 보겠습니다.

타겟 서버의 1977 포트로 접속하면 해당 서버의 관리자 권한으로 로그인이 되는 것을 확인할 수 있습니다.

(실제 공격을 할 때는 타겟 서버의 정보를 모르는 상태이므로 포트 스캔이나 여러가지 사회 공학 기법을 통해 서버의 취약점 정보를 알아내서 공격을 하게 됩니다.) 이렇듯 타겟 취약점이 존재하는 타겟 바이너리에 대한 정보를 알면 거기에 맞는 공격 코드 스크립트를 작성해서 해킹을 할 수 있음을 확인할 수 있습니다. 이외에도 익스플로잇 쉘코드를 만들때도 메타스플로잇을 사용하면 쉽게 만들수 있습니다.


'IT > Security' 카테고리의 다른 글

안드로이드 apk 디컴파일(decompile) 하기  (1) 2015.07.06
제로보드 XE (1.2.1ver) 취약점  (0) 2015.03.19