def new_func(instance, arg): try: for opt in instance.loadedPocs.base_parser._get_all_options(): try: optionParser._check_conflict(opt) optionParser.add_option(opt) except optparse.OptionConflictError as e: pass instance.runParser = optionParser opts, newArgList = optionParser.parse_args(arg.split()) # Must find the remaining args in the original argument list, but # mustn't include the command itself # if hasattr(arg, 'parsed') and newArgList[0] == arg.parsed.command: # newArgList = newArgList[1:] newArgs = cmd2.remaining_args(arg, newArgList) if isinstance(arg, cmd2.ParsedString): arg = arg.with_args_replaced(newArgs) else: arg = newArgs except optparse.OptParseError as e: print (e) optionParser.print_help() return except AttributeError as e: bprintPrefix("Please load a poc first.", "warning") return if hasattr(opts, "_exit"): return None result = func(instance, arg, opts) return result
def new_func(instance, arg): try: for opt in instance.loadedPocs.base_parser._get_all_options( ): try: optionParser._check_conflict(opt) optionParser.add_option(opt) except optparse.OptionConflictError as e: pass instance.runParser = optionParser opts, newArgList = optionParser.parse_args(arg.split()) # Must find the remaining args in the original argument list, but # mustn't include the command itself #if hasattr(arg, 'parsed') and newArgList[0] == arg.parsed.command: # newArgList = newArgList[1:] newArgs = cmd2.remaining_args(arg, newArgList) if isinstance(arg, cmd2.ParsedString): arg = arg.with_args_replaced(newArgs) else: arg = newArgs except optparse.OptParseError as e: print(e) optionParser.print_help() return except AttributeError as e: bprintPrefix('Please load a poc first.', 'warning') return if hasattr(opts, '_exit'): return None result = func(instance, arg, opts) return result
def do_loadsearched(self, arg): if not self.retLastSearch: bprint("[-] please make a search first.", "error") return batchablePocPaths = [] unbatchablePocPaths = [] for pocInfo in self.retLastSearch: pocId, name, rank, level, author, createDate, protocol, port, layer4Protocol, appName, vulType, desc, tag, batchable, path = ( pocInfo ) if batchable: batchablePocPaths.append(path) else: unbatchablePocPaths.append(path) if unbatchablePocPaths: bprintPrefix("These pocs in last search results are not batchable:", "warning") bprintPrefix( "They cannot be loaded in Storm mode, please load them " "singlely in the Shooter mode.", "warning" ) for pocPath in unbatchablePocPaths: print " %s" % os.path.basename(pocPath) if unbatchablePocPaths and batchablePocPaths: print if batchablePocPaths: bprintPrefix("These pocs in last search results are batchable:", "ok") bprintPrefix("They are going to be used to load Storm mode scan.", "ok") for pocPath in batchablePocPaths: print " %s" % os.path.basename(pocPath) return batchablePocPaths else: bprintPrefix("None of the poc in last search result is batchable.", "warning") return None
def do_updatedb(self, arg, opts=None): """""" if opts.mode == "pocs": try: num_insert, num_all, num_err, err_list = self.database.updtDbFromPocs(pocDir=POC_DIR) print "[*] Scan local mode\n%s\nTotal: %s" % ("--" * 10, num_all) except Exception, err: bprintPrefix(err, "error")
def Install(name, pip_proxy=False): print pip_proxy_address = 'http://mirrors.aliyun.com/pypi/simple/' pip_proxy_host = 'mirrors.aliyun.com' bprintPrefix('%s installing...' % name, 'ok') if pip_proxy == True: os.system('pip install %s -i %s --trusted-host %s' % (name, pip_proxy_address, pip_proxy_host)) else: os.system('pip install %s' % name)
def do_lastret(self, arg): """[*] Show the result of last scan.""" if hasattr(self, "retLastScan") and self.retLastScan: try: print res_tb, ret = self.retLastScan print res_tb.get_string(sortby="Status", reversesort=False) print except Exception, e: bprintPrefix("%s\n" % str(e), "warning")
def do_lastret(self, arg): '''[*] Show the result of last scan.''' if hasattr(self, 'retLastScan') and self.retLastScan: try: print res_tb, ret = self.retLastScan print res_tb.get_string(sortby='Status', reversesort=False) print except Exception, e: bprintPrefix('%s\n' % str(e), 'warning')
def do_updatedb(self, arg, opts=None): '''''' if opts.mode == 'pocs': try: num_insert, num_all, num_err, err_list = self.database.updtDbFromPocs( pocDir=POC_DIR) print '[*] Scan local mode\n%s\nTotal: %s' % ('--' * 10, num_all) except Exception, err: bprintPrefix(err, 'error')
def do_showloaded(self, arg): """[*] Show current loaded poc(s)""" if hasattr(self, "loadedPocs") and self.loadedPocs: if isinstance(self, (ShooterMenu, HunterMenu)): bprintPrefix("loaded poc: %s" % self.loadedPocs.poc_info.get("poc").get("id"), "ok") elif isinstance(self, StormMenu): bprintPrefix("loaded pocs: ", "ok") for pocPath in self.loadedPocs: print " %s" % os.path.basename(pocPath) else: bprint("[-] no poc has been loaded.", "error")
def do_search(self, arg): # the func doc below cannot be automatically used as help doc # because this func is wrapped by a decorator. if not arg.strip(): bprintPrefix(self.nonWhiteMsg, 'warning') return try: results = self.database.searchStr(arg.strip()) except Exception, err: print '[-] ', print err return
def do_search(self, arg): # the func doc below cannot be automatically used as help doc # because this func is wrapped by a decorator. if not arg.strip(): bprintPrefix(self.nonWhiteMsg, "warning") return try: results = self.database.searchStr(arg.strip()) except Exception, err: print "[-] ", print err return
def do_showloaded(self, arg): '''[*] Show current loaded poc(s)''' if hasattr(self, 'loadedPocs') and self.loadedPocs: if isinstance(self, (ShooterMenu, HunterMenu)): bprintPrefix('loaded poc: %s' % \ self.loadedPocs.poc_info.get('poc').get('id'), 'ok') elif isinstance(self, StormMenu): bprintPrefix('loaded pocs: ', 'ok') for pocPath in self.loadedPocs: print ' %s' % os.path.basename(pocPath) else: bprint('[-] no poc has been loaded.', 'error')
def do_loadall(self, arg): try: batchablePocs = self.database.getBatchable() pocPaths = [] [pocPaths.append(i[-1]) for i in batchablePocs] bprintPrefix( "%d batchable pocs (%d total pocs) loaded." % (len(pocPaths), self.database.countAll()[0]), "ok" ) return pocPaths except Exception, err: print "[-] ", print err return
def do_loadpoc(self, arg): if not arg.strip().startswith('poc'): pocName = 'poc-' + arg.strip() if pocName.strip()[8] != '-': pocName = 'poc-' + pocName[-8:-4] + '-' + pocName[-4:] else: pocName = arg.strip() pocInfo = self.database.searchPoc( pocId=pocName.strip().replace('_', '-')) if pocInfo is None: bprintPrefix('Cannot find poc %s in database.' % arg, 'error') return pocId, name, rank, level, author, createDate, protocol, port, \ layer4Protocol, appName, vulType, desc, tag, batchable, \ path = pocInfo if not path or not os.path.exists(path): bprintPrefix('Poc file %s not exists, perhaps you have\'t bought '\ 'it.\n' % path, 'error') return try: p = poc.Poc(path=os.path.join(POC_DIR, '%s.py' % \ pocName.strip().replace('-', '_')), batchable=batchable) mp = p.module.MyPoc(run_in_shell=False) mp._init_parser(do_parse=False) bprintPrefix('load %s success!' % path, 'ok') return mp except Exception, err: bprintPrefix(err, 'error')
def do_loadpoc(self, arg): if not arg.strip().startswith("poc"): pocName = "poc-" + arg.strip() if pocName.strip()[8] != "-": pocName = "poc-" + pocName[-8:-4] + "-" + pocName[-4:] else: pocName = arg.strip() pocInfo = self.database.searchPoc(pocId=pocName.strip().replace("_", "-")) if pocInfo is None: bprintPrefix("Cannot find poc %s in database." % arg, "error") return pocId, name, rank, level, author, createDate, protocol, port, layer4Protocol, appName, vulType, desc, tag, batchable, path = ( pocInfo ) if not path or not os.path.exists(path): bprintPrefix("Poc file %s not exists, perhaps you have't bought " "it.\n" % path, "error") return try: p = poc.Poc(path=os.path.join(POC_DIR, "%s.py" % pocName.strip().replace("-", "_")), batchable=batchable) mp = p.module.MyPoc(run_in_shell=False) mp._init_parser(do_parse=False) bprintPrefix("load %s success!" % path, "ok") return mp except Exception, err: bprintPrefix(err, "error")
def do_loadall(self, arg): try: batchablePocs = self.database.getBatchable() pocPaths = [] [pocPaths.append(i[-1]) for i in batchablePocs] bprintPrefix( '%d batchable pocs (%d total pocs) loaded.' % ( len(pocPaths), self.database.countAll()[0], ), 'ok') return pocPaths except Exception, err: print '[-] ', print err return
def do_loadsearched(self, arg): if not self.retLastSearch: bprint('[-] please make a search first.', 'error') return batchablePocPaths = [] unbatchablePocPaths = [] for pocInfo in self.retLastSearch: pocId, name, rank, level, author, createDate, protocol, port, \ layer4Protocol, appName, vulType, desc, tag, batchable, \ path = pocInfo if batchable: batchablePocPaths.append(path) else: unbatchablePocPaths.append(path) if unbatchablePocPaths: bprintPrefix( 'These pocs in last search results are not batchable:', 'warning') bprintPrefix('They cannot be loaded in Storm mode, please load them '\ 'singlely in the Shooter mode.', 'warning') for pocPath in unbatchablePocPaths: print ' %s' % os.path.basename(pocPath) if unbatchablePocPaths and batchablePocPaths: print if batchablePocPaths: bprintPrefix('These pocs in last search results are batchable:', 'ok') bprintPrefix('They are going to be used to load Storm mode scan.', 'ok') for pocPath in batchablePocPaths: print ' %s' % os.path.basename(pocPath) return batchablePocPaths else: bprintPrefix('None of the poc in last search result is batchable.', 'warning') return None
def do_export(self, arg): """[*] Save the result as a file.""" if not arg.strip(): bprintPrefix(self.nonWhiteMsg, "error") return if hasattr(self, "retLastScan") and self.retLastScan: try: res_tb, ret = self.retLastScan _output = open(arg.strip(), "a+") _output.write(str(ret)) _output.close() bprintPrefix("Write file success: %s" % arg.strip(), "ok") except Exception, e: bprintPrefix("%s\n" % str(e), "warning")
def do_export(self, arg): '''[*] Save the result as a file.''' if not arg.strip(): bprintPrefix(self.nonWhiteMsg, 'error') return if hasattr(self, 'retLastScan') and self.retLastScan: try: res_tb, ret = self.retLastScan _output = open(arg.strip(), 'a+') _output.write(str(ret)) _output.close() bprintPrefix('Write file success: %s' % arg.strip(), 'ok') except Exception, e: bprintPrefix('%s\n' % str(e), 'warning')
def do_run(self, arg, opts=None): if not hasattr(self, 'loadedPocs') or not self.loadedPocs: bprintPrefix('Please load a poc first.', 'warning') return file_alert = 'Need to load a targets file. (domains)' if not opts.file: bprintPrefix(file_alert, 'warning') return if opts.file: filename = opts.file if filename[0] == "'": filename = filename.strip("'") elif filename[0] == '"': filename = filename.strip('"') try: f_req = open(filename, 'r') if os.stat(filename).st_size == 0: bprintPrefix('File content is empty?', 'warning') return except Exception, err: bprintPrefix(str(err), 'error') return
def do_run(self, arg): if not hasattr(self, 'loadedPocs') or not self.loadedPocs: bprintPrefix('Please load a poc first.', 'warning') return if not arg.strip(): bprintPrefix('Please enter the target.', 'error') return s = Storm(target=arg, listPocPaths=self.loadedPocs, poolModule=TestPlatform(), concurrency=20, verify=True) ret = s.scan() JOB_UNSTART = 0 # poc not run JOB_RUNNING = 1 JOB_FINISHED = 2 # poc run ok JOB_ERROR = -1 # error encountered when run poc JOB_ABORT = -2 # running poc is abort, viz unfinished print bprintPrefix('Scan end, Results:\n', 'ok') res_tb = PrettyTable([ 'Vulnerability', 'Pid', 'Status', 'Result', ]) res_tb.align['Vulnerability'] = 'l' for r in ret.values(): pid = r['args'][0].replace('_', '-') poc_info = self.database.searchPoc(pid) state = r['state'] if state == JOB_FINISHED: status = str(r['jobRet']['success']) result = str(r['jobRet']['poc_ret']) if status == 'None': status = 'False' result = 'N/A' elif status == 'False': result = 'Not Vulnerable' elif state == JOB_ERROR: status = 'Error' result = r['exception'] else: status = 'Error' res_tb.add_row( [poc_info[1][:25] + '...', pid, status, result[:25]]) print res_tb.get_string(sortby='Status', reversesort=False) print return res_tb, ret
def do_run(self, arg, opts=None): if not hasattr(self, "loadedPocs") or not self.loadedPocs: bprintPrefix("Please load a poc first.", "warning") return file_alert = "Need to load a targets file. (domains)" if not opts.file: bprintPrefix(file_alert, "warning") return if opts.file: filename = opts.file if filename[0] == "'": filename = filename.strip("'") elif filename[0] == '"': filename = filename.strip('"') try: f_req = open(filename, "r") if os.stat(filename).st_size == 0: bprintPrefix("File content is empty?", "warning") return except Exception, err: bprintPrefix(str(err), "error") return
def do_run(self, arg, opts=None): if not hasattr(self, "loadedPocs") or not self.loadedPocs: bprintPrefix("Please load a poc first.", "warning") return if not opts.target: bprintPrefix("No target input!\n", "warning") self.runParser.print_help() return print ret = self.loadedPocs.run(options=opts.__dict__, debug=opts.debug) bprintPrefix("%s:\n" % self.loadedPocs.poc_info["poc"]["id"], "info") # results view if ret["options"]: print "%starget: %s" % (" " * 4, ret["options"]["target"]) try: if ret["exception"]: print "%sexception: %s" % (" " * 4, ret["exception"]) except Exception, err: pass
def do_run(self, arg, opts=None): if not hasattr(self, 'loadedPocs') or not self.loadedPocs: bprintPrefix('Please load a poc first.', 'warning') return if not opts.target: bprintPrefix('No target input!\n', 'warning') self.runParser.print_help() return print ret = self.loadedPocs.run(options=opts.__dict__, debug=opts.debug) bprintPrefix('%s:\n' % self.loadedPocs.poc_info['poc']['id'], 'info') # results view if ret['options']: print '%starget: %s' % (' ' * 4, ret['options']['target']) try: if ret['exception']: print '%sexception: %s' % (' ' * 4, ret['exception']) except Exception, err: pass
def do_run(self, arg): if not hasattr(self, "loadedPocs") or not self.loadedPocs: bprintPrefix("Please load a poc first.", "warning") return if not arg.strip(): bprintPrefix("Please enter the target.", "error") return s = Storm(target=arg, listPocPaths=self.loadedPocs, poolModule=TestPlatform(), concurrency=20, verify=True) ret = s.scan() JOB_UNSTART = 0 # poc not run JOB_RUNNING = 1 JOB_FINISHED = 2 # poc run ok JOB_ERROR = -1 # error encountered when run poc JOB_ABORT = -2 # running poc is abort, viz unfinished print bprintPrefix("Scan end, Results:\n", "ok") res_tb = PrettyTable(["Vulnerability", "Pid", "Status", "Result"]) res_tb.align["Vulnerability"] = "l" for r in ret.values(): pid = r["args"][0].replace("_", "-") poc_info = self.database.searchPoc(pid) state = r["state"] if state == JOB_FINISHED: status = str(r["jobRet"]["success"]) result = str(r["jobRet"]["poc_ret"]) if status == "None": status = "False" result = "N/A" elif status == "False": result = "Not Vulnerable" elif state == JOB_ERROR: status = "Error" result = r["exception"] else: status = "Error" res_tb.add_row([poc_info[1][:25] + "...", pid, status, result[:25]]) print res_tb.get_string(sortby="Status", reversesort=False) print return res_tb, ret
def do_status(self, arg): """print status information.""" bprintPrefix("BeeHive Version: %s" % VERSION, msgType="ok") bprintPrefix("Exploits & PoCs: %d\n" % self.database.countAll()[0], "ok")
def help_loadpoc(self): bprintPrefix('Load a poc to test a target.', 'info')
def help_run(self): bprintPrefix('Run poc to shoot a target.', 'info')
def help_loadpoc(self): bprintPrefix("Load a poc to test a target.", "info")
def help_loadsearched(self): bprintPrefix('load last searched result(s) to test a target.', 'info')
def help_run(self): bprintPrefix("Run poc to shoot a target.", "info")
def help_loadall(self): bprintPrefix("Load all poc to storm a target.", "info")
def help_run(self): bprintPrefix('Run loaded poc(s)', 'info')
def do_status(self, arg): '''print status information.''' bprintPrefix('BeeHive Version: %s' % VERSION, msgType='ok') bprintPrefix('Exploits & PoCs: %d\n' % self.database.countAll()[0], 'ok')
def help_loadsearched(self): bprintPrefix("load last searched result(s) to test a target.", "info")
def do_run(self, arg): bprintPrefix("Can't run this command under the root menu.", "error") return
def help_run(self): bprintPrefix("Run loaded poc(s)", "info")
def do_run(self, arg): bprintPrefix("Can't run this command under the root menu.", 'error') return
@cmd2.options([cmd2.make_option("-m", "--mode", action="store", help="Update database. (json / pocs)")]) def do_updatedb(self, arg, opts=None): """""" if opts.mode == "pocs": try: num_insert, num_all, num_err, err_list = self.database.updtDbFromPocs(pocDir=POC_DIR) print "[*] Scan local mode\n%s\nTotal: %s" % ("--" * 10, num_all) except Exception, err: bprintPrefix(err, "error") elif opts.mode == "json": try: num_insert, num_all, num_err, err_list = self.database.updtDbFromJson("./pocdb.json") print "[*] JSON import mode\n%s\nTotal: %s" % ("--" * 10, num_all) except Exception, err: bprintPrefix(err, "error") else: bprintPrefix("WTF!?", "warning") return bprint("Insert number: %s" % num_insert, "ok") bprint("Error number: %s" % num_err, "error") for i in err_list: print " %s" % i def do_showloaded(self, arg): """[*] Show current loaded poc(s)""" if hasattr(self, "loadedPocs") and self.loadedPocs: if isinstance(self, (ShooterMenu, HunterMenu)): bprintPrefix("loaded poc: %s" % self.loadedPocs.poc_info.get("poc").get("id"), "ok") elif isinstance(self, StormMenu): bprintPrefix("loaded pocs: ", "ok")
def help_loadall(self): bprintPrefix('Load all poc to storm a target.', 'info')
def Main(pip_proxy): try: bprintPrefix('pip version: %s' % (os.popen('pip --version').readlines()[0].strip()), 'info') except Exception as err: bprintPrefix(str(err), 'error') sys.exit() requirements = Requirements() plat, platstr = TestPlatform() if platstr == 'windows': requirements.remove('gevent') else: requirements.append('readline') bprintPrefix('Platform: %s' % plat, 'info') if Framework_check() == True: bprintPrefix('Beebeeto-framework check: ok', 'ok') else: bprintPrefix('Beebeeto-framework check: false', 'error') bprintPrefix('Installing...', 'info') if platstr == 'windows': os.system('cd .. & git clone https://github.com/n0tr00t/Beebeeto-framework') else: os.system('cd ../ ; git clone https://github.com/n0tr00t/Beebeeto-framework') [Install(r, pip_proxy) for r in requirements] bprintPrefix('Finish :)', 'ok')
if opts.mode == 'pocs': try: num_insert, num_all, num_err, err_list = self.database.updtDbFromPocs( pocDir=POC_DIR) print '[*] Scan local mode\n%s\nTotal: %s' % ('--' * 10, num_all) except Exception, err: bprintPrefix(err, 'error') elif opts.mode == 'json': try: num_insert, num_all, num_err, err_list = self.database.updtDbFromJson( './pocdb.json') print '[*] JSON import mode\n%s\nTotal: %s' % ('--' * 10, num_all) except Exception, err: bprintPrefix(err, 'error') else: bprintPrefix('WTF!?', 'warning') return bprint('Insert number: %s' % num_insert, 'ok') bprint('Error number: %s' % num_err, 'error') for i in err_list: print ' %s' % i def do_showloaded(self, arg): '''[*] Show current loaded poc(s)''' if hasattr(self, 'loadedPocs') and self.loadedPocs: if isinstance(self, (ShooterMenu, HunterMenu)): bprintPrefix('loaded poc: %s' % \ self.loadedPocs.poc_info.get('poc').get('id'), 'ok') elif isinstance(self, StormMenu):