<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中我們不使用TDD(測試驅動的開發),但是我們有一個測試套件。在計算機上本地運行測試之前,必須安裝必要的gem:

    export BEEF_TEST=true
    bundle install --with test
    

    BeEF測試全部包含在<beef_root>/spec目錄中。Rakefile <beef_root>/Rakefile包含按類別組織的測試任務。

    要運行所有測試,請運行(從<beef_root>):

    bundle exec rake --all

    否則,僅運行某些測試類別,例如“ spec”,請運行:

    bundle exec rake spec

    在計算機上本地運行測試之前,您可能需要將中的ATTACK_DOMAIN和VICTIM_DOMAIN的值更改為以下內容<beef_root>/spec/support/constants.rb

    ATTACK_DOMAIN = "127.0.0.1"
    VICTIM_DOMAIN = "localhost"

    這些值必須不同,但是如果兩個都解析為同一主機,則可以接受。

    在負責在每次GIT更改上運行所有測試套件的連續集成服務器上,這些常量已經包含正確的默認值。當您為本地測試更改這些值時,請確保不要將這些更改提交/推送到BeEF存儲庫。

    測試類別

    BeEF測試框架是兩種測試的組合:

    • rspec測試
    • 功能測試

    要 單獨運行這些測試: bundle exec rake 和特定類別,例如: bundle exec rake rdoc運行rdoc。

    我們目前有以下測試類別:

    • ssl::創建一個新的SSL證書并重新生成SSL證書
    • rdoc::創建rdoc信息
    • beef_start::設置并啟動BeEF
    • beef_stop::清理并停止牛肉
    • msf_start::啟動msf_console
    • msf_stop::殺死MSF_process
    • msf_update:: git提取msf倉庫
    • dmg::創建Mac DMG文件
    • cde::這將下載并使CDE可執行并在cde-package中生成一個cde包
    • cde_beef_start::啟動CDE /牛肉環境設置
    • db::需要:environment需要牛肉

    運行(臨時)跳過的測試

    使用定義的RSpec測試將被xit跳過。如果您想運行這些測試,請更改xitit,它將運行。

    例如,從2020年1月17日spec/beef/extensions/requester_spec.rb開始,默認情況下會跳過功能測試。

    # change this
    xit 'requester works' do
    
    # to this
    it 'requester works' do
    

    單元測試

    在編寫單元測試時,您將主要使用兩個功能:

    assert(Boolean)->如果布爾條件為true,則測試通過。例如:

    a  =  1 
    b  =  1

    測試確定。

    assert (a == b )
    assert_equal  a ,b

    測試失敗。

    assert(not(a == b))

    要檢查代碼塊是否沒有引發(或拋出,如您所愿:-)任何異常:

    assert_nothing_raised do
        something
    end

    功能測試

    對于功能測試,除了使用單元測試的某些方面之外,我們使用Capybara和Selenium-WebDriver。結果是可以從用戶的角度對瀏覽器進行編程控制(目前Firefox,我們正在努力改進Webkit和其他瀏覽器的測試套件)。例如,我們可以對瀏覽器進行檢測以登錄到BeEF Web GUI,如下所示:

     def self.login(session = nil)
        session = Capybara::Session.new(:selenium) if session.nil?
        session.visit(ATTACK_URL)
        sleep 2.0
        session.has_content?('BeEF Authentication')
        session.fill_in 'user', :with => 'beef'
        session.fill_in 'pass', :with => 'beef'
        session.click_button('Login')
        sleep 10.0
    
        session
      end

    測試命令模塊

    為了在測試過程中將自定義JavaScript注入到掛鉤的瀏覽器中,您有2種選擇:

    • execute_script:可從Capybara :: Session類型的對象獲得。當您要注入的JavaScript實際上返回某些內容時,它會派上用場。例:
    def test_jools_simple
            victim = BeefTest.new_victim
            script = " var ciccio = 'ciccio';
                ciccio += '_pasticcio';
                return ciccio;"
           result = victim.execute_script(script)
           assert_equal result,'ciccio_pasticcio'
        end
    • RESTful API:您可以啟動命令模塊并通過RESTful API檢索結果,也可以將其用于測試目的。當要插入到掛鉤瀏覽器中的JavaScript復雜或未顯式返回值(即僅使用Beef.net.send()返回數據)時,此功能特別有效。例如,要測試模塊(在本例中為Debug模塊)的執行,請參見以下示例。另外,看看<beef_root>/test/integration/tc_debug_modules.rb為了看一些變量怎么樣hb_sessiontoken和其他人從以前的測試中檢索。
    ## Test debug module "Test_return_long_string" using the RESTful API
      def test_return_long_string
        repeat_string = "BeEF"
        repeat_count = 20
    
        response = RestClient.post "#{RESTAPI_MODULES}/#{@@hb_session}/#{@@mod_debug_long_string}?token=#{@@token}",
                                   { 'repeat_string' => repeat_string,
                                     'repeat'        => repeat_count}.to_json,
                                   :content_type => :json,
                                   :accept => :json
        assert_equal 200, response.code
        assert_not_nil response.body
        result = JSON.parse(response.body)
        success = result['success']
        assert success
    
        cmd_id = result['command_id']
        count = 0
        response = RestClient.get "#{RESTAPI_MODULES}/#{@@hb_session}/#{@@mod_debug_long_string}/#{cmd_id}?token=#{@@token}"
    
        while(response.body.size <= 2 && count < 10)
          response = RestClient.get "#{RESTAPI_MODULES}/#{@@hb_session}/#{@@mod_debug_long_string}/#{cmd_id}?token=#{@@token}"
          sleep 2
          count += 1
        end
        assert_equal 200, response.code
        assert_not_nil response.body
        result = JSON.parse(response.body)
        data = JSON.parse(result['0']['data'])['data']
        assert_not_nil data
        assert_equal data,(repeat_string * repeat_count)
      end

    測試Metasploit

    要測試Metasploit集成,請運行: bundle exec rake msf_start

    這會將最新版本的Metasploit克隆到/ tmp / msf-test /

    檢查Ruby Gems

    要檢查Ruby Gems中的已知漏洞,請運行: bundle exec rake bundle_audit

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

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


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