fixed logout helper and cleaned up code
This commit is contained in:
81
spec/requests/beef_test_spec.rb
Normal file
81
spec/requests/beef_test_spec.rb
Normal file
@@ -0,0 +1,81 @@
|
||||
#
|
||||
# Copyright (c) 2006-2024 Wade Alcorn - wade@bindshell.net
|
||||
# Browser Exploitation Framework (BeEF) - https://beefproject.com
|
||||
# See the file 'doc/COPYING' for copying permission
|
||||
#
|
||||
require 'spec_helper'
|
||||
require 'capybara/rspec'
|
||||
require_relative '../support/beef_test'
|
||||
|
||||
RSpec.describe BeefTest do
|
||||
let(:session) { Capybara::Session.new(:selenium) }
|
||||
let(:victim) { Capybara::Session.new(:selenium) }
|
||||
|
||||
before(:each) do
|
||||
@pid = start_beef_server_and_wait
|
||||
end
|
||||
|
||||
after(:each) do
|
||||
# Shutting down server
|
||||
Process.kill("KILL", @pid) unless @pid.nil?
|
||||
Process.wait(@pid) unless @pid.nil? # Ensure the process has exited and the port is released
|
||||
@pid = nil
|
||||
end
|
||||
|
||||
describe '.login' do
|
||||
it 'logs in successfully' do
|
||||
expect(port_available?) # Check if the tcp port is open
|
||||
session = BeefTest.login()
|
||||
expect(session).not_to be_nil
|
||||
expect(session.has_content?('Hooked Browsers', wait: 10))
|
||||
end
|
||||
end
|
||||
|
||||
describe '.logout' do
|
||||
before(:each) do
|
||||
expect(port_available?) # # Check if the tcp port is open
|
||||
@session = BeefTest.login() # Ensure login before each '.logout' test
|
||||
expect(@session.has_content?('Hooked Browsers', wait: 10))
|
||||
end
|
||||
|
||||
it 'logs out successfully' do
|
||||
expect(port_available?) # # Check if the tcp port is open
|
||||
expect(@session.has_content?('Hooked Browsers', wait: 10))
|
||||
|
||||
# Log out of the session
|
||||
@sessoin = BeefTest.logout(@session)
|
||||
expect(@session.has_no_content?('Hooked Browsers', wait: 10))
|
||||
expect(@session.has_content?('Authentication', wait: 10))
|
||||
end
|
||||
end
|
||||
|
||||
describe '.save_screenshot' do
|
||||
it 'saves a screenshot' do
|
||||
session = Capybara::Session.new(:selenium_headless) if session.nil?
|
||||
|
||||
# Ensure the new directory does not exist
|
||||
outputDir = '/tmp'
|
||||
directory = "#{outputDir}/#{SecureRandom.hex}/"
|
||||
expect(File.directory?(directory)).to be false
|
||||
|
||||
# Save the screenshot
|
||||
BeefTest.save_screenshot(session, directory)
|
||||
|
||||
# Ensure the screenshot was saved
|
||||
expect(File.directory?(directory)).to be true
|
||||
screenshot_files = Dir.glob("#{directory}/*.png")
|
||||
expect(screenshot_files.empty?).to be false
|
||||
|
||||
# Ensure the screenshot file is not empty and clean up
|
||||
screenshot_files.each do |file|
|
||||
expect(File.size(file)).to be > 0
|
||||
File.delete(file)
|
||||
end
|
||||
expect(Dir.glob("#{directory}/*.png").empty?).to be true
|
||||
|
||||
# Remove the directory
|
||||
Dir.delete(directory)
|
||||
expect(File.directory?(directory)).to be false
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -21,7 +21,6 @@ class BeefTest
|
||||
session.visit(ATTACK_URL)
|
||||
|
||||
session.has_content?('Authentication', wait: 10)
|
||||
save_screenshot(session)
|
||||
|
||||
# enter the credentials
|
||||
session.execute_script("document.getElementById('pass').value = '#{CGI.escapeHTML(BEEF_PASSWD)}'\;")
|
||||
@@ -47,13 +46,13 @@ class BeefTest
|
||||
session.execute_script(login_script)
|
||||
|
||||
session.has_content?('Hooked Browsers', wait: 10)
|
||||
save_screenshot(session)
|
||||
|
||||
session
|
||||
end
|
||||
|
||||
def self.logout(session)
|
||||
session.click_link('Logout')
|
||||
session.click_on('Logout')
|
||||
session.has_content?('Authentication', wait: 10)
|
||||
|
||||
session
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user