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跳過。如果您想運行這些測試,請更改xit為it,它將運行。
例如,從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_session,token和其他人從以前的測試中檢索。
## 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
BeEF中文文檔
推薦文章: