def initConsoleMode(self): if self.metaconfig: try: mode = edfmeta.parse_consolemode(self.metaconfig) self.consolemode = util.convert_consolemode(mode) except expat.ExpatError: # Pass here because we printed something while parsing the # invalid file, but we want execution to continue pass else: Plugin.initConsoleMode(self)
def do_execute(self, input): """Execute the current plugin""" session = None self.io.newline() inputList = input.strip().split() if len(inputList) > 0: consolemode = inputList[0].lower() consolemode = util.convert_consolemode(consolemode) else: consolemode = 0 plugin = self.get_active_plugin() self.io.print_warning("Preparing to Execute %s" % plugin.name) #self.io.print_warning("dddd===XXX %s" % plugin.validate(self.session.get_dirs(), globalvars=self.fb.fbglobalvars)) #self.io.print_warning("dddd===FFF %s" % plugin.isValid()) #self.io.print_warning("dddddddxxxx %s" % self.session.get_dirs()) #self.io.print_warning("mmmm %s" % self.fb.fbglobalvars) #if plugin.validate(self.session.get_dirs(), globalvars=self.fb.fbglobalvars) and plugin.isValid(): if True: # XXX - Get the description before redirection. # This really should be fixed to not care about order plugin_desc = plugin.getSessionDescription() redirid = self.fb.redirection.pre_exec(plugin) try: # Last chance to quit, print execution info and prompt if redirid: self.fb.redirection.print_session(redirid) #self.fb.do_redirect("") self.io.print_warning("Verify Redirection Tunnels Exist") self.io.prompt_confirm_redir() self.exe_print_params(plugin, redirid) self.io.prompt_continue() self.io.print_msg("Executing Plugin") if self.fb.log: self.fb.log[plugin.name] = self.fb.log.launch_from_command( 'execute', plugin.getName(), plugin.getConfigVersion()).start() # Generate a new session and execute session = self.session.add_item(plugin.getName(), plugin_desc) newwindow, logfile = plugin.execute( session, consolemode, self.fb.is_interactive(), self.fb.is_scripted(), globalvars=self.fb.fbglobalvars, runMode="FB") except Exception as e: self.io.print_error("Error running plugin: {0}".format(e)) newwindow = False session = None finally: self.fb.redirection.post_exec(plugin, redirid) if self.fb.log and plugin.name in self.fb.log: try: try: session except: pass else: if 'Project' in self.fb.fbglobalvars: self.fb.log[plugin.name].set( project_name=self.fb. fbglobalvars['Project']) self.fb.log[plugin.name].queue(**dict( [(k, v) for k, v in session.history.params.values()] + [(v[0], v[1]) for v in session.contract.params.values()])) if session.is_failed(): parent = self.fb.log[ plugin.name].failed_exploit() else: parent = self.fb.log[ plugin.name].successful_exploit() self.fb.log[plugin.name].file_from_path( logfile, parent) except: if self.fb.log: self.fb.log.notify_of_error('Recording use of ' + str(plugin.name)) if newwindow: self.io.print_warning( "Plugin Spawned in New Console - Running Detached") else: if session and not session.is_failed(): self.io.print_success("%s Succeeded" % plugin.name) if plugin.createsRendezvous(): self.io.newline() self.io.print_warning( "Connection to Target Established") self.io.print_warning("Waiting For Next Stage") else: raise exception.CmdErr, "%s Failed" % plugin.name else: #self.do_validate() raise exception.CmdErr, "Execution Aborted" self.io.newline()
def do_execute(self, input): """Execute the current plugin""" session = None self.io.newline() inputList = input.strip().split() if len(inputList) > 0: consolemode = inputList[0].lower() consolemode = util.convert_consolemode(consolemode) else: consolemode = 0 plugin = self.get_active_plugin() self.io.print_warning("Preparing to Execute %s" % plugin.name) if plugin.validate( self.session.get_dirs(), globalvars=self.fb.fbglobalvars) and plugin.isValid(): # XXX - Get the description before redirection. # This really should be fixed to not care about order runMode = 'FB' plugin_desc = plugin.getSessionDescription() modes = [ ("DANE", "Forward deployment via DARINGNEOPHYTE"), #("DAVE", "Forward deployment via DARINGVETERAN"), ("FB", "Traditional deployment from within FUZZBUNCH"), ] self.io.print_prompt_param( { "name": "Mode", "description": "Delivery mechanism", "type": "Choice", "attribs": modes }, "0") runMode = self.io.prompt_user("Mode", params=modes, default="0", gvars=self.fb.fbglobalvars) self.io.print_success("Run Mode: %s" % (runMode)) self.io.newline() listenPort = 0 if runMode in ("DANE", "DAVE"): pairs = sorted( (k, k) for k in plugin.package_arches.iterkeys()) self.io.print_prompt_param( { "name": "ArchOs", "description": "Architecture/OS of REDIRECTOR", "required": "YES", "valid": "YES", "type": "Choice", "attribs": pairs }, "0") archOs = self.io.prompt_user("ArchOS", "0", pairs, gvars=self.fb.fbglobalvars) # Prompt for proxy port listenPort = int( self.io.prompt_user("Linkup TCP port (0=none)?", default="0", gvars=self.fb.fbglobalvars)) if listenPort: plugin.set("DaveProxyPort", str(listenPort)) self.io.print_success("set DaveProxyPort ==> %d" % (listenPort)) # TODO: prompt operator to verify remote callback tunnel exists for localhost comms else: archOs = 'x86-Windows' if runMode == "FB": if not self.io.prompt_yn( "This will execute locally like traditional Fuzzbunch plugins. Are you sure? (y/n)" ): raise exception.CmdErr("User abort") redirid = self.fb.redirection.pre_exec(plugin) else: redirid = '' newwindow = False try: # Last chance to quit, print execution info and prompt if redirid: self.fb.redirection.print_session(redirid) #self.fb.do_redirect("") self.io.print_warning("Verify Redirection Tunnels Exist") self.io.prompt_confirm_redir() self.exe_print_params(plugin, redirid) self.io.prompt_continue() self.io.print_msg("Executing Plugin") if self.fb.log: try: self.fb.log[plugin.getName( )] = self.fb.log.launch_from_command( 'execute', plugin.getName(), plugin.getConfigVersion()).start() except: pass # Generate a new session and execute session = self.session.add_item(plugin.getName(), plugin_desc) newwindow, logfile = plugin.execute( session, consolemode, self.fb.is_interactive(), self.fb.is_scripted(), globalvars=self.fb.fbglobalvars, runMode=runMode, archOs=archOs, listenPort=listenPort) except Exception as e: self.io.print_error("Error running plugin: {0}".format(e)) newwindow = False session = None finally: self.fb.redirection.post_exec(plugin, redirid) if self.fb.log and plugin.name in self.fb.log: try: try: session except: pass else: if 'Project' in self.fb.fbglobalvars: self.fb.log[plugin.name].set( project_name=self.fb. fbglobalvars['Project']) self.fb.log[plugin.name].queue(**dict( [(k, v) for k, v in session.history.params.values()] + [(v[0], v[1]) for v in session.contract.params.values()])) if session.is_failed(): parent = self.fb.log[ plugin.name].failed_exploit() else: parent = self.fb.log[ plugin.name].successful_exploit() self.fb.log[plugin.name].file_from_path( logfile, parent) except: if self.fb.log: self.fb.log.notify_of_error('Recording use of ' + str(plugin.name)) if runMode in ('DANE', 'DAVE'): return if newwindow: self.io.print_warning( "Plugin Spawned in New Console - Running Detached") else: if session and not session.is_failed(): self.io.print_success("%s Succeeded" % plugin.name) if plugin.createsRendezvous(): self.io.newline() self.io.print_warning( "Connection to Target Established") self.io.print_warning("Waiting For Next Stage") else: raise exception.CmdErr, "%s Failed" % plugin.name else: #self.do_validate() raise exception.CmdErr, "Execution Aborted" self.io.newline()