From 58efd34f8c8b9bb187d1a609924af285edd16680 Mon Sep 17 00:00:00 2001 From: bcoles Date: Mon, 3 Apr 2023 15:01:52 +1000 Subject: [PATCH] Extensions: Remove IPEC extension (#2792) * Remove browser extension payloads from Social Engineering modules * Extensions: Remove IPEC extension --- .../ar-migrations/022_create_ipec_exploit.rb | 9 - .../023_create_ipec_exploit_run.rb | 9 - extensions/admin_ui/api/handler.rb | 1 - .../media/javascript/ui/panel/WelcomeTab.js | 1 - .../media/javascript/ui/panel/ZombieTab.js | 4 - .../javascript/ui/panel/tabs/ZombieTabIpec.js | 236 ------------------ extensions/ipec/config.yaml | 11 - extensions/ipec/extension.rb | 41 --- extensions/ipec/files/LinkTargetFinder.xpi | Bin 8844 -> 0 bytes .../files/LinkTargetFinder/chrome.manifest | 8 - .../chrome/content/browser.xul | 22 -- .../chrome/content/linkTargetFinder.js | 43 ---- .../chrome/content/options.xul | 31 --- .../defaults/preferences/prefs.js | 27 -- .../ipec/files/LinkTargetFinder/install.rdf | 23 -- .../locale/en-US/translations.dtd | 1 - .../ipec/files/LinkTargetFinder/skin/skin.css | 18 -- .../LinkTargetFinder/skin/status-bar.png | Bin 423 -> 0 bytes .../LinkTargetFinder/skin/toolbar-large.png | Bin 1067 -> 0 bytes extensions/ipec/junk_calculator.rb | 29 --- extensions/ipec/models/ipec_exploits.rb | 14 -- extensions/ipec/models/ipec_exploits_run.rb | 14 -- extensions/ipec/rest/ipec.rb | 69 ----- .../fake_flash_update/command.js | 21 +- .../fake_flash_update/config.yaml | 2 +- .../fake_flash_update/module.rb | 6 +- .../fake_notification_ff/config.yaml | 2 +- .../fake_notification_ff/module.rb | 11 +- .../replace_video_fake_plugin/config.yaml | 2 +- .../replace_video_fake_plugin/module.rb | 7 +- spec/beef/extensions/ipec_tunnel_spec.rb | 18 -- 31 files changed, 7 insertions(+), 673 deletions(-) delete mode 100644 core/main/ar-migrations/022_create_ipec_exploit.rb delete mode 100644 core/main/ar-migrations/023_create_ipec_exploit_run.rb delete mode 100644 extensions/admin_ui/media/javascript/ui/panel/tabs/ZombieTabIpec.js delete mode 100644 extensions/ipec/config.yaml delete mode 100644 extensions/ipec/extension.rb delete mode 100644 extensions/ipec/files/LinkTargetFinder.xpi delete mode 100644 extensions/ipec/files/LinkTargetFinder/chrome.manifest delete mode 100644 extensions/ipec/files/LinkTargetFinder/chrome/content/browser.xul delete mode 100644 extensions/ipec/files/LinkTargetFinder/chrome/content/linkTargetFinder.js delete mode 100644 extensions/ipec/files/LinkTargetFinder/chrome/content/options.xul delete mode 100644 extensions/ipec/files/LinkTargetFinder/defaults/preferences/prefs.js delete mode 100644 extensions/ipec/files/LinkTargetFinder/install.rdf delete mode 100644 extensions/ipec/files/LinkTargetFinder/locale/en-US/translations.dtd delete mode 100644 extensions/ipec/files/LinkTargetFinder/skin/skin.css delete mode 100644 extensions/ipec/files/LinkTargetFinder/skin/status-bar.png delete mode 100644 extensions/ipec/files/LinkTargetFinder/skin/toolbar-large.png delete mode 100644 extensions/ipec/junk_calculator.rb delete mode 100644 extensions/ipec/models/ipec_exploits.rb delete mode 100644 extensions/ipec/models/ipec_exploits_run.rb delete mode 100644 extensions/ipec/rest/ipec.rb delete mode 100644 spec/beef/extensions/ipec_tunnel_spec.rb diff --git a/core/main/ar-migrations/022_create_ipec_exploit.rb b/core/main/ar-migrations/022_create_ipec_exploit.rb deleted file mode 100644 index 6bf6ed46a..000000000 --- a/core/main/ar-migrations/022_create_ipec_exploit.rb +++ /dev/null @@ -1,9 +0,0 @@ -class CreateIpecExploit < ActiveRecord::Migration[6.0] - def change - create_table :ipec_exploits do |t| - t.text :name - t.text :protocol - t.text :os - end - end -end diff --git a/core/main/ar-migrations/023_create_ipec_exploit_run.rb b/core/main/ar-migrations/023_create_ipec_exploit_run.rb deleted file mode 100644 index d48c8eabf..000000000 --- a/core/main/ar-migrations/023_create_ipec_exploit_run.rb +++ /dev/null @@ -1,9 +0,0 @@ -class CreateIpecExploitRun < ActiveRecord::Migration[6.0] - def change - create_table :ipec_exploit_runs do |t| - t.boolean :launched - t.text :http_headers - t.text :junk_size - end - end -end diff --git a/extensions/admin_ui/api/handler.rb b/extensions/admin_ui/api/handler.rb index 0cd82481f..75764866c 100644 --- a/extensions/admin_ui/api/handler.rb +++ b/extensions/admin_ui/api/handler.rb @@ -78,7 +78,6 @@ module BeEF ui/panel/tabs/ZombieTabRider.js ui/panel/tabs/ZombieTabXssRays.js wterm/wterm.jquery.js - ui/panel/tabs/ZombieTabIpec.js ui/panel/tabs/ZombieTabAutorun.js ui/panel/PanelViewer.js ui/panel/LogsDataGrid.js diff --git a/extensions/admin_ui/media/javascript/ui/panel/WelcomeTab.js b/extensions/admin_ui/media/javascript/ui/panel/WelcomeTab.js index 4a0d9e02e..56e867641 100644 --- a/extensions/admin_ui/media/javascript/ui/panel/WelcomeTab.js +++ b/extensions/admin_ui/media/javascript/ui/panel/WelcomeTab.js @@ -39,7 +39,6 @@ WelcomeTab = function() {
  • Proxy: The Proxy tab allows you to submit arbitrary HTTP requests on behalf of the hooked browser. \ Each request sent by the Proxy is recorded in the History panel. Click a history item to view the HTTP headers and HTML source of the HTTP response.
  • \
  • Network: The Network tab allows you to interact with hosts on the local network(s) of the hooked browser.
  • \ -
  • IPEC: Send commands to the victims systems using Inter-Protocol Exploitation/Communication (IPEC)
  • \
  • WebRTC: Send commands to the victims systems via a zombie specified as the primary WebRTC caller.
  • \
    \

    You can also right-click a hooked browser to open a context-menu with additional functionality:


    \ diff --git a/extensions/admin_ui/media/javascript/ui/panel/ZombieTab.js b/extensions/admin_ui/media/javascript/ui/panel/ZombieTab.js index f548676a3..07fcd3367 100644 --- a/extensions/admin_ui/media/javascript/ui/panel/ZombieTab.js +++ b/extensions/admin_ui/media/javascript/ui/panel/ZombieTab.js @@ -10,7 +10,6 @@ ZombieTab = function(zombie) { commands_tab = new ZombieTab_Commands(zombie); proxy_tab = new ZombieTab_Requester(zombie); xssrays_tab = new ZombieTab_XssRaysTab(zombie); - ipec_tab = new ZombieTab_IpecTab(zombie); autorun_tab = new ZombieTab_Autorun(zombie); network_tab = new ZombieTab_Network(zombie); webrtc_tab = new ZombieTab_Rtc(zombie); @@ -32,7 +31,6 @@ ZombieTab = function(zombie) { commands_tab, proxy_tab, xssrays_tab, - ipec_tab, autorun_tab, network_tab, webrtc_tab @@ -41,8 +39,6 @@ ZombieTab = function(zombie) { afterrender:function(component){ // Hide auto-run tab component.hideTabStripItem(autorun_tab); - // Hide IPEC tab - it's current broken - component.hideTabStripItem(ipec_tab); // Hide tabs for disabled functionality <%= BeEF::Core::Configuration.instance.get("beef.extension.webrtc.enable") ? '' : 'component.hideTabStripItem(webrtc_tab);' %> <%= BeEF::Core::Configuration.instance.get("beef.extension.xssrays.enable") ? '' : 'component.hideTabStripItem(xssrays_tab);' %> diff --git a/extensions/admin_ui/media/javascript/ui/panel/tabs/ZombieTabIpec.js b/extensions/admin_ui/media/javascript/ui/panel/tabs/ZombieTabIpec.js deleted file mode 100644 index ac1fb8013..000000000 --- a/extensions/admin_ui/media/javascript/ui/panel/tabs/ZombieTabIpec.js +++ /dev/null @@ -1,236 +0,0 @@ -// -// Copyright (c) 2006-2023 Wade Alcorn - wade@bindshell.net -// Browser Exploitation Framework (BeEF) - http://beefproject.com -// See the file 'doc/COPYING' for copying permission -// - -/* - * The Ipec Tab panel for the selected zombie. - */ - -ZombieTab_IpecTab = function(zombie) { - - var commands_statusbar = new Beef_StatusBar('ipec-bbar-zombie-'+zombie.session); - - var ipec_config_panel = new Ext.Panel({ - id: 'ipec-config-zombie-'+zombie.session, - title: 'Scan Config', - layout: 'fit', - autoscroll: true - }); - - function get_module_id(name, token){ - var id = ""; - var url = "/api/modules/search/" + name + "?token=" + token; - $jwterm.ajax({ - contentType: 'application/json', - dataType: 'json', - type: 'GET', - url: url, - async: false, - processData: false, - success: function(data){ - id = data.id; - }, - error: function(){ - beef.debug("Error getting module id."); - } - }); - return id; - } - - - function escape_html(str) { - str = str.toString(); - str = str.replace(//g, '>'); -// str = str.replace(/\u0022/g, '"'); - str = str.replace(/\u0027/g, '''); - str = str.replace(/\"\"/g, ''); - str = str.replace(/\\r/g, ''); - str = str.replace(/\\n/g, '
    '); - str = str.replace(/\\\\/g, '\\'); - str = str.replace(/\\t/g, '    '); -// str = str.replace(/\\/g, '\'); - return str; - } - - function validateNumber(input, min, max) { - var value = parseInt(input); - return (!isNaN(value) && value >= min && value <= max); - } - - - function initTerminal(zombie){ - String.prototype.reverse = function() { - return this.split('').reverse().join(''); - }; - - $jwterm( document ).ready( function() { - $jwterm('#wterm').wterm( { WIDTH: '100%', HEIGHT: '100%', WELCOME_MESSAGE: 'Welcome to BeEF Bind interactive shell. Unfortunately the IPEC shell is currently broken. See: https://github.com/beefproject/beef/issues/1394 - To Begin Using type \'help\'' }); - }); - - var target_ip = ""; - var target_port = ""; - - var command_directory = { - - 'target': function(tokens){ - var ip_regex = new RegExp('^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$'); - target_ip = tokens[1]; - target_port = tokens[2]; - if(ip_regex.test(target_ip) && validateNumber(target_port, 1, 65535)){ - return "Target is now " + tokens[1] + ":" + tokens[2]; - }else{ - return "Target error: invalid IP or port."; - } - }, - - 'exec': function(tokens){ - if(target_ip.length == 0 || target_port.length == 0) - return "Error: target ip or port not set." - - tokens.shift(); //remove the first element (exec) - var cmd = tokens.join(' '); //needed in case of commands with options - cmd = cmd.replace(/\\/g, '\\\\'); //needed to prevent JS errors (\ need to be escaped) - - var token = beefwui.get_rest_token(); - var mod_id = get_module_id("BeEF_bind_shell", token); - - var uri = "/api/modules/" + zombie.session + "/" + mod_id + "?token=" + token; - - var result = null; - - $jwterm.ajax({ - contentType: 'application/json', - data: JSON.stringify({"rhost":target_ip, "rport":target_port, "path":"/", "cmd":cmd}), - dataType: 'json', - type: 'POST', - url: uri, - async: false, - processData: false, - success: function(data){ - beef.debug("data: " + data.command_id); - result = "Command [" + data.command_id + "] sent successfully"; - }, - error: function(){ - beef.debug("Error sending command"); - return "Error sending command"; - } - }); - - return result; - }, - - 'get': function(tokens){ - var command_id = tokens[1]; - - if(command_id != null){ - - var token = beefwui.get_rest_token(); - var mod_id = get_module_id("BeEF_bind_shell", token); - - var uri_results = "/api/modules/" + zombie.session + "/" + mod_id + "/" - + command_id + "?token=" + token; - var results = ""; - $jwterm.ajax({ - contentType: 'application/json', - dataType: 'json', - type: 'GET', - url: uri_results, - async: false, - processData: false, - success: function(data){ - $jwterm.each(data, function(i){ - beef.debug("result [" + i +"]: " + $jwterm.parseJSON(data[i].data).data); - results += $jwterm.parseJSON(data[i].data).data; - }); - - }, - error: function(){ - beef.debug("Error sending command"); - return "Error sending command"; - } - }); - results = escape_html(results); - if(results.charAt(0) == '"' && results.charAt(results.length-1) == '"') - results = results.slice(1,results.length-1); - - return results; - } - }, - - 'strrev': { - PS1: 'strrev $', - - EXIT_HOOK: function() { - return 'exit interface commands'; - }, - - START_HOOK: function() { - return 'exit interface commands'; - }, - - DISPATCH: function( tokens ) { - return tokens.join('').reverse(); - } - } - }; - - for( var j in command_directory ) { - $jwterm.register_command( j, command_directory[j] ); - } - - $jwterm.register_command( 'help', function() { - return 'target - Usage: target <IP> <port> - Send commands to the specified IP:port
    ' + - 'exec - Usage exec <command> <command options> - Exec a command, returns the command id.
    ' + - 'get - Usage get <command id> - Retrieve command results given a specified command id.
    ' - - }); - }; - - - var ipec_terminal_panel = new Ext.Panel({ - id: 'ipec-terminal-zombie-'+zombie.session, - title: 'Terminal', - layout: 'fit', - padding: '1 1 1 1', - autoScroll: true, - html: "
    ", - listeners: { - afterrender : function(){ - initTerminal(zombie); - } - } - - }); - - function createIpecTerminalPanel(zombie, bar, value) { - - panel = Ext.getCmp('ipec-config-zombie-'+zombie.session); - panel.setTitle('Prompt'); - panel.add(ipec_terminal_panel); - } - - ZombieTab_IpecTab.superclass.constructor.call(this, { - id: 'ipec-log-tab-'+zombie.session, - title: 'Ipec', - activeTab: 0, - viewConfig: { - forceFit: true, - type: 'fit', - autoScroll:true - }, - items: [ipec_config_panel], - bbar: commands_statusbar, - listeners: { - afterrender : function(){ - createIpecTerminalPanel(zombie, commands_statusbar); - }, - autoScroll:true - - } - }); -}; - -Ext.extend(ZombieTab_IpecTab, Ext.TabPanel, {} ); diff --git a/extensions/ipec/config.yaml b/extensions/ipec/config.yaml deleted file mode 100644 index 63c57336d..000000000 --- a/extensions/ipec/config.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# -# Copyright (c) 2006-2023 Wade Alcorn - wade@bindshell.net -# Browser Exploitation Framework (BeEF) - http://beefproject.com -# See the file 'doc/COPYING' for copying permission -# -beef: - extension: - ipec: - enable: false - name: 'Inter-Protocol Exploitation' - authors: ["antisnatchor"] diff --git a/extensions/ipec/extension.rb b/extensions/ipec/extension.rb deleted file mode 100644 index 314b47bbd..000000000 --- a/extensions/ipec/extension.rb +++ /dev/null @@ -1,41 +0,0 @@ -# -# Copyright (c) 2006-2023 Wade Alcorn - wade@bindshell.net -# Browser Exploitation Framework (BeEF) - http://beefproject.com -# See the file 'doc/COPYING' for copying permission -# -module BeEF - module Extension - # TODO: remove it from here: - # Handlers - # require 'extensions/ipec/fingerprinter' - # require 'extensions/ipec/launcher' - require 'extensions/ipec/junk_calculator' - - module Ipec - extend BeEF::API::Extension - - @short_name = 'Ipec' - @full_name = 'Inter-Protocol Exploitation' - @description = "Use the Inter-Protocol Exploitation technique to send shellcode to daemons implementing 'tolerant' protocols." - - module RegisterIpecRestHandler - def self.mount_handler(server) - server.mount('/api/ipec', BeEF::Extension::Ipec::IpecRest.new) - end - end - - BeEF::API::Registrar.instance.register(BeEF::Extension::Ipec::RegisterIpecRestHandler, BeEF::API::Server, 'mount_handler') - - # TODO: remove it from here, and make it dynamic. - BeEF::Extension::Ipec::JunkCalculator.instance.bind_junk_calculator('imapeudora1') - end - end -end - -# Models -# todo: to be used when we'll have more IPEC exploits -# require 'extensions/ipec/models/ipec_exploits' -# require 'extensions/ipec/models/ipec_exploits_run' - -# RESTful api endpoints -require 'extensions/ipec/rest/ipec' diff --git a/extensions/ipec/files/LinkTargetFinder.xpi b/extensions/ipec/files/LinkTargetFinder.xpi deleted file mode 100644 index 3fadfa9c2419213df4bb78d510da982ad639dc40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8844 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 Lg6S$H^3(qSqQF(L diff --git a/extensions/ipec/files/LinkTargetFinder/chrome.manifest b/extensions/ipec/files/LinkTargetFinder/chrome.manifest deleted file mode 100644 index f9ad9ab4c..000000000 --- a/extensions/ipec/files/LinkTargetFinder/chrome.manifest +++ /dev/null @@ -1,8 +0,0 @@ -content linktargetfinder chrome/content/ -content linktargetfinder chrome/content/ contentaccessible=yes -overlay chrome://browser/content/browser.xul chrome://linktargetfinder/content/browser.xul - -locale linktargetfinder en-US locale/en-US/ - -skin linktargetfinder classic/1.0 skin/ -style chrome://global/content/customizeToolbar.xul chrome://linktargetfinder/skin/skin.css \ No newline at end of file diff --git a/extensions/ipec/files/LinkTargetFinder/chrome/content/browser.xul b/extensions/ipec/files/LinkTargetFinder/chrome/content/browser.xul deleted file mode 100644 index 5b63810a8..000000000 --- a/extensions/ipec/files/LinkTargetFinder/chrome/content/browser.xul +++ /dev/null @@ -1,22 +0,0 @@ - - - - -