Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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")
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
 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")
Ejemplo n.º 7
0
 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')
Ejemplo n.º 8
0
 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')
Ejemplo n.º 9
0
 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")
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
 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
Ejemplo n.º 12
0
 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')
Ejemplo n.º 13
0
 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
Ejemplo n.º 14
0
 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')
Ejemplo n.º 15
0
 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")
Ejemplo n.º 16
0
 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
Ejemplo n.º 17
0
 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
Ejemplo n.º 18
0
 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")
Ejemplo n.º 19
0
 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')
Ejemplo n.º 20
0
 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
Ejemplo n.º 21
0
 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
Ejemplo n.º 22
0
 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
Ejemplo n.º 23
0
 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
Ejemplo n.º 24
0
 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
Ejemplo n.º 25
0
 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
Ejemplo n.º 26
0
 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")
Ejemplo n.º 27
0
 def help_loadpoc(self):
     bprintPrefix('Load a poc to test a target.', 'info')
Ejemplo n.º 28
0
 def help_run(self):
     bprintPrefix('Run poc to shoot a target.', 'info')
Ejemplo n.º 29
0
 def help_loadpoc(self):
     bprintPrefix("Load a poc to test a target.", "info")
Ejemplo n.º 30
0
 def help_loadsearched(self):
     bprintPrefix('load last searched result(s) to test a target.', 'info')
Ejemplo n.º 31
0
 def help_run(self):
     bprintPrefix("Run poc to shoot a target.", "info")
Ejemplo n.º 32
0
 def help_loadall(self):
     bprintPrefix("Load all poc to storm a target.", "info")
Ejemplo n.º 33
0
 def help_run(self):
     bprintPrefix('Run loaded poc(s)', 'info')
Ejemplo n.º 34
0
 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')
Ejemplo n.º 35
0
 def help_loadsearched(self):
     bprintPrefix("load last searched result(s) to test a target.", "info")
Ejemplo n.º 36
0
 def do_run(self, arg):
     bprintPrefix("Can't run this command under the root menu.", "error")
     return
Ejemplo n.º 37
0
 def help_run(self):
     bprintPrefix("Run loaded poc(s)", "info")
Ejemplo n.º 38
0
 def do_run(self, arg):
     bprintPrefix("Can't run this command under the root menu.", 'error')
     return
Ejemplo n.º 39
0
    @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")
Ejemplo n.º 40
0
 def help_loadall(self):
     bprintPrefix('Load all poc to storm a target.', 'info')
Ejemplo n.º 41
0
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')
Ejemplo n.º 42
0
        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):