From 0fb4805c44be724e88d1697c1e18d0f88ee0bc82 Mon Sep 17 00:00:00 2001 From: Stephen Date: Tue, 26 Mar 2024 06:53:33 +1000 Subject: [PATCH] fixed login helper function --- spec/support/beef_test.rb | 48 ++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/spec/support/beef_test.rb b/spec/support/beef_test.rb index ad41558ea..a3cfe78fe 100644 --- a/spec/support/beef_test.rb +++ b/spec/support/beef_test.rb @@ -3,29 +3,51 @@ # Browser Exploitation Framework (BeEF) - https://beefproject.com # See the file 'doc/COPYING' for copying permission # -require 'test/unit' - +require 'selenium-webdriver' +require 'spec_helper' require 'capybara' require 'capybara/rspec' Capybara.run_server = false # we need to run our own BeEF server -require 'selenium-webdriver' - class BeefTest - def self.save_screenshot(session) - Dir.mkdir(BEEF_TEST_DIR) unless File.directory?(BEEF_TEST_DIR) - session.driver.browser.save_screenshot(BEEF_TEST_DIR + Time.now.strftime('%Y-%m-%d--%H-%M-%S-%N') + '.png') + def self.save_screenshot(session, dir = nil) + outputDir = dir || BEEF_TEST_DIR + Dir.mkdir(outputDir) unless File.directory?(outputDir) + session.driver.browser.save_screenshot(outputDir + Time.now.strftime('%Y-%m-%d--%H-%M-%S-%N') + '.png') end def self.login(session = nil) session = Capybara::Session.new(:selenium_headless) if session.nil? session.visit(ATTACK_URL) - sleep 2.0 - session.has_content?('BeEF Authentication') - session.fill_in 'user', with: BEEF_USER - session.fill_in 'pass', with: BEEF_PASSWD - session.click_button('Login') - sleep 10.0 + + session.has_content?('Authentication', wait: 10) + save_screenshot(session) + + # enter the credentials + session.execute_script("document.getElementById('pass').value = '#{CGI.escapeHTML(BEEF_PASSWD)}'\;") + session.execute_script("document.getElementById('user').value = '#{CGI.escapeHTML(BEEF_USER)}'\;") + + # due to using JS there seems to be a race condition - this is a workaround + session.has_content?('beef', wait: 10) + + # click the login button + login_script = <<-JAVASCRIPT + var loginButton; + var buttons = document.getElementsByTagName('button'); + for (var i = 0; i < buttons.length; i++) { + if (buttons[i].textContent === 'Login') { + loginButton = buttons[i]; + break; + } + } + if (loginButton) { + loginButton.click(); + } + JAVASCRIPT + session.execute_script(login_script) + + session.has_content?('Hooked Browsers', wait: 10) + save_screenshot(session) session end