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
只看当前版本


暂无话题~