<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    BeEF 創建擴展

    介紹

    顧名思義,擴展用于“擴展” BeEF的功能。擴展與模塊略有不同。它們是向BeEF的核心功能添加新功能的一種方式,而模塊通常具有執行特定任務的狹窄功能集。通過模塊化新的核心功能,有助于防止功能蠕變。

    目錄布局

    添加一個新的擴展位于extensions/目錄中,并且通常具有以下布局:

    • extension.rb
    • <name>.rb
    • config.yaml
    • api.rb
    • model.rb
    • rest/
      • <name>.rb

    從技術上講,唯一需要的文件是extension.rbconfig.yaml。但實際上,您還<name>.rb至少需要一個文件,以使所有內容都不會被塞到一個位置。堅持這種布局可以提高一致性和可維護性。

    • extension.rb
      該文件是擴展的主要入口點。當BeEF引導時加載其擴展名時,它將從此處開始。它的內容包括與您的擴展相關的元數據:它的簡稱,全名和描述。它也是require擴展將使用的任何其他文件的位置。這里定義的類必須是extend BeEF:: API::Extension

    • <name>.rb
      這是擴展程序的核心功能所在。它將屬于BeEF:: Extension名稱空間。例如,如果您的擴展名為“ foobar”,則該文件將被命名foobar.rb并定義模塊BeEF:: Extension::Foobar。如果您發現擴展名需要的不僅僅是一個類,則應將其拆分為多個文件。

    • config.yaml
      在此處可以找到任何特定于擴展名的設置。您的擴展名必須在下面,beef.extension并且至少要包含enable用于控制其使用的布爾鍵。

    • api.rb
      如果擴展需要注冊任何定時的API調用,則可以在此處定義一個類來注冊。最常見的API類是BeEF:: API::Server注冊#pre_http_start#mount_handler。如果需要多個類,請將它們放在新的api/子目錄下。

    • model.rb
      如果擴展需要數據庫模型,則在此定義模型。BeEF使用DataMapper作為其ORM,因此此處定義的任何類都必須mixin DataMapper::Resource。如果需要多個模型,請將它們放在新的models/子目錄下。

    • rest/
      添加到BeEF的RESTful API接口的擴展將在此子目錄中進行。關聯的HTTP路由是使用Sinatra inside 定義的<name>.rb

    Daytime 示例

    如果在BeEF的問題跟蹤器發現了模塊請求。無論出于何種原因,該特定模塊都需要訪問Daytime協議。作為一名專業的BeEF黑客,您決定實現Daytime服務的最佳方法是擴展。如果該模塊或任何以后的模塊和擴展需要Daytime 服務,則只需聯系BeEF服務器。

    首先創建一個新extensions/daytime/目錄。在其中,您需要的前兩個文件是extension.rbconfig.yaml

    # extension.rb
    module BeEF
    module Extension
    module Daytime
    
      extend BeEF::API::Extension
    
      @short_name  = 'daytime'
      @full_name   = 'Daytime Service'
      @description = 'Implementation of the Daytime protocol which sends the current date and time'
    
    end
    end
    end
    
    require 'extensions/daytime/api.rb'
    require 'extensions/daytime/daytime.rb'

    BeEF:: API::Extension和定義@short_name@full_name并分別@description解釋擴展名的簡稱,全名和描述。在文件末尾,您需要require任何其他源文件。在這里,我們包括了api.rbdaytime.rb。我們尚未定義它們,但我們會盡快定義。

    你在那兒 現在寫入您的config.yaml文件。

    # config.yaml
    beef:
        extension:
            daytime:
                enable: true
                name: 'Daytime Service'
                address: '127.0.0.1'
                port: '1300'
                authors: ['Kilgore Trout']

    由于我們正在編寫一個非常簡單的擴展程序,因此中僅需要幾個基本設置config.yaml。該enable密鑰用于控制是否應加載該擴展名,擴展名應name類似于@full_namein中extension.rb。您在其中定義了服務器的地址和端口,address以及port。請注意,我們將端口設置為1300,而不是傳統的端口13。這是因為眾所周知的端口0-1023需要超級用戶特權。最后,authors關鍵是要把這項出色的工作歸功于自己。

    賦予事物生命

    是時候給這個擴展加上一些字符了。daytime.rb像這樣創建一個新文件。

    module BeEF
    module Extension
    module Daytime
    
      class Server
    
        FORMAT = "%A, %B %d, %Y %H:%M:%S-%Z"
    
        def self.run_server(address, port)
          @server = TCPServer.new(address, port)
    
          loop do
            Thread.start(@server.accept) do |socket|
              socket.write(Time.now.strftime(FORMAT))
              socket.close
            end
          end
        end
    
      end
    
    end
    end
    end

    很簡單,對吧?這是您的基本套接字服務器。在新的連接請求上,它僅使用Ruby的Time類發送回當前時間。

    您在擴展程序中所做的完全取決于您。除了在中定義以外,沒有其他限制BeEF::Extension

    但是,如何在BeEF啟動時使其運行?這就是BeEF的API注冊商開始發揮作用的地方。BeEF啟動時,它將運行任何具有hook的方法BeEF:: API::Server#pre_http_start。這正是我們將要做的api.rb

    # api.rb
    module BeEF
    module Extension
    module Daytime
    module API
    
      module DaytimeHandler
    
        BeEF::API::Registrar.instance.register(BeEF::Extension::Daytime::API::DaytimeHandler,
                                               BeEF::API::Server,
                                               'pre_http_start')
    
        def self.pre_http_start(http_hook_server)
          config = BeEF::Core::Configuration.instance
    
          address = config.get('beef.extension.daytime.address')
          port = config.get('beef.extension.daytime.port')
    
          Thread.new { BeEF::Extension::Daytime::Server.run_server(address, port) }
    
          print_info "Daytime Server: #{address}:#{port}"
        end
    
      end
    
    end
    end
    end
    end

    要向#pre_http_startBeEF 注冊我們的方法,我們通過調用BeEF:: API::Registrar#register.Inside 通知注冊服務商,我們#pre_http_start使用從配置文件中檢索地址和端口值BeEF:: Core::Configuration。注意,我們在一個新線程中啟動了服務器。這是因為我們的擴展程序旨在在后臺連續運行。如果沒有,BeEF將繼續等待#pre_http_start返回并最終無限期掛起。

    運行

    現在已經實現了服務器,并且已經告訴BeEF何時啟動服務器,我們可以通過運行BeEF來檢查一切是否就緒。

    [foobar@localhost beef]$ ./beef
    [21:43:34][*] Bind socket [imapeudora1] listening on [0.0.0.0:2000].
    [21:43:34][*] Browser Exploitation Framework (BeEF) 0.4.4.5-alpha
    [21:43:34]    |   Twit: @beefproject
    [21:43:34]    |   Site: http://beefproject.com
    [21:43:34]    |   Blog: http://blog.beefproject.com
    [21:43:34]    |_  Wiki: https://github.com/beefproject/beef/wiki
    [21:43:34][*] Project Creator: Wade Alcorn (@WadeAlcorn)
    [21:43:35][*] BeEF is loading. Wait a few seconds...
    [21:43:35][*] 13 extensions enabled.
    [21:43:35][*] 162 modules enabled.
    [21:43:35][*] 2 network interfaces were detected.
    [21:43:35][+] running on network interface: 127.0.0.1
    [21:43:35]    |   Hook URL: http://127.0.0.1:3000/hook.js
    [21:43:35]    |_  UI URL:   http://127.0.0.1:3000/ui/panel
    [21:43:35][+] running on network interface: 192.168.240.28
    [21:43:35]    |   Hook URL: http://192.168.240.28:3000/hook.js
    [21:43:35]    |_  UI URL:   http://192.168.240.28:3000/ui/panel
    [21:43:35][*] RESTful API key: 1e95497768c5aa542eb2632362869ec050e48142
    [21:43:35][*] Daytime Server: 127.0.0.1:1300
    [21:43:35][*] HTTP Proxy: http://127.0.0.1:6789
    [21:43:35][*] BeEF server started (press control+c to stop)
    

    擴展程序已正確加載,盡管這不一定意味著我們的Daytime服務器實際上就可以工作,所以需要使用Netcat來確保。

    [foobar@localhost ~]$ nc 127.0.0.1 1300
    Sunday, June 09, 2013 21:50:52-EDT
    

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类