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
推荐文章: