def main(workspace=''): ports = [80, 443, 8080] for service in models.get_services(workspace): for port in ports: if port in service.ports: print(service.name)
def main(workspace='', args=None, parser=None): parser.add_argument('protocol', help="Desired protocol", default="") parser.add_argument('--path', help="Saves the Image in a given path", default=".") parsed_args = parser.parse_args(args) protocols = parsed_args.protocol.split(",") path = parsed_args.path for protocol in protocols: if not os.path.exists(path): print("Invalid Path") exit() try: services = models.get_services(workspace) except ResourceDoesNotExist: print("Invalid workspace name: ", workspace) return 1, None for service in services: service_protocol = service.protocol.lower() if service_protocol == protocol: port = str(service.ports[0]) interface_id = ".".join(service.id.split(".")[:2]) interface = models.get_interface(workspace, interface_id) ip = interface.ipv4["address"] print(protocol + "://" + ip + ":" + port) screenshot(path, protocol, ip, port) return 0, None
def get_parent(ws, parent_tag): logger.debug("Getting parent") try: parent = models.get_host(ws, parent_tag) or models.get_service(ws, parent_tag) except ResourceDoesNotExist: parent = models.get_hosts(ws, name=parent_tag) or models.get_services(ws, name=parent_tag) if len(parent) == 0: return None return parent
def search_hosts_by_service(workspace, b_service): output = "" all_hosts = list(models.get_hosts(workspace)) all_services = list(models.get_services(workspace)) for host in all_hosts: for service in all_services: id_service_host = service.parent_id if host.id == id_service_host and service.name == b_service: output += host.name + "\n" break return output
def main(workspace='', args=None, parser=None): parser.add_argument('-y', '--yes', action="store_true") parsed_args = parser.parse_args(args) if not parsed_args.yes: if not query_yes_no("Are you sure you want to delete all closed services in the " "workspace %s" % workspace, default='no'): return 1, None for service in models.get_services(workspace): if service.status != 'open' and service.status != 'opened': print('Deleted service: ' + service.name) models.delete_service(workspace, service.id) return 0, None
def main(workspace='', args=None, parser=None): parser.add_argument('-y', '--yes', action="store_true") parsed_args = parser.parse_args(args) if not parsed_args.yes: if not query_yes_no( "Are you sure you want to delete all closed services in the " "workspace %s" % workspace, default='no'): return 1, None for service in models.get_services(workspace): if service.status != 'open' and service.status != 'opened': print('Deleted service: ' + service.name) models.delete_service(workspace, service.id) return 0, None
def get_services(self, **params): return models.get_services(self.active_workspace, **params)
def main(workspace='', args=None, parser=None): parser.add_argument('-p', type=int, nargs='+', metavar='port', help='List of ports to filter', default=[]) parser.add_argument('services', nargs='*', help='List of service names', default=[]), parser.add_argument('--columns', help='Comma separated list of columns to show.', default="host,service,ports,protocol,status,host_os", choices=COLUMNS.keys()) parser.add_argument('--status', help='Comma separated list of status to filter for.') parser.add_argument('-a', help='Show additional information, like ports filtered and column headers.', action='store_true', dest='additional_info') parser.add_argument('-f', help='Do not apply any filter. Print every host.', action='store_true', dest='no_filter') parser.add_argument('-s', '--sorted', help='Print the list sorted IP..', action='store_true') parsed_args = parser.parse_args(args) port_list = parsed_args.p for service in parsed_args.services: if service in SERVICES: port_list += SERVICES[service] else: sys.stderr.write(Fore.YELLOW + "WARNING: Service definition not found. [%s]\n" % service + Fore.RESET) if not port_list and not parsed_args.no_filter: print "Empty filter set." return 1, None if parsed_args.additional_info and not parsed_args.no_filter: print 'Filtering services for ports: ' + ', '.join(map(str, sorted(port_list))) columns = filter(None, parsed_args.columns.split(',')) status_filter = None if parsed_args.status is not None: status_filter = filter(None, parsed_args.status.split(',')) lines = [] for service in models.get_services(workspace): for port in service.ports: if port in port_list or parsed_args.no_filter: if not parsed_args.no_filter and status_filter is not None and not service.status in status_filter: continue column_data = [] for column in columns: column_data += [COLUMNS[column](service, workspace)] lines += [column_data] if not lines: print "No services running on that port found." return 0, None col_width = max(len(word) for row in lines for word in row) + 2 if parsed_args.additional_info: print ''.join(col.ljust(col_width) for col in columns) print '-' * (col_width * len(columns)) if parsed_args.sorted: # Compare lines using the first column (IP) for row in sorted(lines, cmp=lambda l1, l2: cmp(l1[0], l2[0])): print "".join(word.ljust(col_width) for word in row) else: for row in lines: print "".join(word.ljust(col_width) for word in row) return 0, None
def main(): signal.signal(signal.SIGINT, signal_handler) parser = argparse.ArgumentParser(description='Search duplicated objects on Faraday') parser.add_argument('-w', '--workspace', help='Search duplicated objects into this workspace', required=True) parser.add_argument('-s', '--server', help='Faraday server', required=False, default="http://127.0.0.1:5985/") parser.add_argument('-u', '--user', help='Faraday user', required=False, default="") parser.add_argument('-p', '--password', help='Faraday password', required=False, default="") parser.add_argument('-o', '--output', help='Choose a custom output directory', required=False) parser.add_argument('-l', '--log', help='Choose a custom log level', required=False) args = parser.parse_args() lockf = ".lock.pod" if not lock_file(lockf): print ("You can run only one instance of searcher (%s)" % lockf) exit(0) workspace = '' if args.workspace: workspace = args.workspace else: print("You must enter a workspace in command line, please use --help to read more") os.remove(lockf) exit(0) _server = 'http://127.0.0.1:5985/' if args.server: _server = args.server _user = '******' if args.user: _user = args.user _password = '******' if args.password: _password = args.password output = 'output/' if args.output: output = args.output loglevel = 'debug' if args.log: loglevel = args.log for d in [output, 'log/']: if not os.path.isdir(d): os.makedirs(d) numeric_level = getattr(logging, loglevel.upper(), None) if not isinstance(numeric_level, int): raise ValueError('Invalid log level: %s' % loglevel) if not logger.handlers: logger.propagate = 0 logger.setLevel(numeric_level) fh = logging.FileHandler('log/searcher.log') fh.setLevel(numeric_level) # create console handler with a higher log level ch = logging.StreamHandler() ch.setLevel(numeric_level) # create formatter and add it to the handlers formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') fh.setFormatter(formatter) ch.setFormatter(formatter) logger.addHandler(fh) logger.addHandler(ch) try: session_cookie = login_user(_server, _user, _password) if not session_cookie: raise UserWarning('Invalid credentials!') else: CONF.setDBUser(_user) CONF.setDBSessionCookies(session_cookie) server.AUTH_USER = _user server.AUTH_PASS = _password server.SERVER_URL = _server server.FARADAY_UP = False logger.info('Started') logger.info('Searching objects into workspace %s ' % workspace) logger.debug("Getting hosts ...") hosts = models.get_hosts(workspace) logger.debug("Getting services ...") services = models.get_services(workspace) logger.debug("Getting vulnerabilities ...") vulns = models.get_all_vulns(workspace) if validate_rules(): process_vulnerabilities(workspace, vulns, _server) process_services(workspace, services, _server) process_hosts(workspace, hosts, _server) # Remove lockfile os.remove(lockf) logger.info('Finished') except ResourceDoesNotExist: logger.error("Resource not found") os.remove(lockf) exit(0) except Exception as errorMsg: logger.error(errorMsg) os.remove(lockf) exit(0)
def main(): signal.signal(signal.SIGINT, signal_handler) parser = argparse.ArgumentParser( description='Search duplicated objects on Faraday') parser.add_argument('-w', '--workspace', help='Search duplicated objects into this workspace', required=True) parser.add_argument('-s', '--server', help='Faraday server', required=False, default="http://127.0.0.1:5985/") parser.add_argument('-u', '--user', help='Faraday user', required=False, default="") parser.add_argument('-p', '--password', help='Faraday password', required=False, default="") parser.add_argument('-o', '--output', help='Choose a custom output directory', required=False) parser.add_argument('-l', '--log', help='Choose a custom log level', required=False) args = parser.parse_args() lockf = ".lock.pod" if not lock_file(lockf): print("You can run only one instance of searcher (%s)" % lockf) exit(0) workspace = '' if args.workspace: workspace = args.workspace else: print( "You must enter a workspace in command line, please use --help to read more" ) os.remove(lockf) exit(0) _server = 'http://127.0.0.1:5985/' if args.server: _server = args.server _user = '******' if args.user: _user = args.user _password = '******' if args.password: _password = args.password output = 'output/' if args.output: output = args.output loglevel = 'debug' if args.log: loglevel = args.log for d in [output, 'log/']: if not os.path.isdir(d): os.makedirs(d) numeric_level = getattr(logging, loglevel.upper(), None) if not isinstance(numeric_level, int): raise ValueError('Invalid log level: %s' % loglevel) if not logger.handlers: logger.propagate = 0 logger.setLevel(numeric_level) fh = logging.FileHandler('log/searcher.log') fh.setLevel(numeric_level) # create console handler with a higher log level ch = logging.StreamHandler() ch.setLevel(numeric_level) # create formatter and add it to the handlers formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s: %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') fh.setFormatter(formatter) ch.setFormatter(formatter) logger.addHandler(fh) logger.addHandler(ch) try: session_cookie = login_user(_server, _user, _password) if not session_cookie: raise UserWarning('Invalid credentials!') else: CONF.setDBUser(_user) CONF.setDBSessionCookies(session_cookie) server.AUTH_USER = _user server.AUTH_PASS = _password server.SERVER_URL = _server server.FARADAY_UP = False logger.info('Started') logger.info('Searching objects into workspace %s ' % workspace) logger.debug("Getting hosts ...") hosts = models.get_hosts(workspace) logger.debug("Getting services ...") services = models.get_services(workspace) logger.debug("Getting vulnerabilities ...") vulns = models.get_all_vulns(workspace) if validate_rules(): process_vulnerabilities(workspace, vulns, _server) process_services(workspace, services, _server) process_hosts(workspace, hosts, _server) # Remove lockfile os.remove(lockf) logger.info('Finished') except ResourceDoesNotExist: logger.error("Resource not found") os.remove(lockf) exit(0) except Exception as errorMsg: logger.error(errorMsg) os.remove(lockf) exit(0)
def main(workspace=''): for service in models.get_services(workspace): if 23 in service.ports: print(service.name)
def main(workspace='', args=None, parser=None): parser.add_argument('-p', type=int, nargs='+', metavar='port', help='List of ports to filter', default=[]) parser.add_argument('services', nargs='*', help='List of service names', default=[]), parser.add_argument('--columns', help='Comma separated list of columns to show.', default="host,service,ports,protocol,status,host_os", choices=COLUMNS.keys()) parser.add_argument('--status', help='Comma separated list of status to filter for.') parser.add_argument( '-a', help= 'Show additional information, like ports filtered and column headers.', action='store_true', dest='additional_info') parser.add_argument('-f', help='Do not apply any filter. Print every host.', action='store_true', dest='no_filter') parser.add_argument('-s', '--sorted', help='Print the list sorted IP..', action='store_true') parsed_args = parser.parse_args(args) port_list = parsed_args.p for service in parsed_args.services: if service in SERVICES: port_list += SERVICES[service] else: sys.stderr.write(Fore.YELLOW + "WARNING: Service definition not found. [%s]\n" % service + Fore.RESET) if not port_list and not parsed_args.no_filter: print "Empty filter set." return 1, None if parsed_args.additional_info and not parsed_args.no_filter: print 'Filtering services for ports: ' + ', '.join( map(str, sorted(port_list))) columns = filter(None, parsed_args.columns.split(',')) status_filter = None if parsed_args.status is not None: status_filter = filter(None, parsed_args.status.split(',')) lines = [] for service in models.get_services(workspace): for port in service.ports: if port in port_list or parsed_args.no_filter: if not parsed_args.no_filter and status_filter is not None and not service.status in status_filter: continue column_data = [] for column in columns: column_data += [COLUMNS[column](service, workspace)] lines += [column_data] if not lines: print "No services running on that port found." return 0, None col_width = max(len(word) for row in lines for word in row) + 2 if parsed_args.additional_info: print ''.join(col.ljust(col_width) for col in columns) print '-' * (col_width * len(columns)) if parsed_args.sorted: # Compare lines using the first column (IP) for row in sorted(lines, cmp=lambda l1, l2: cmp(l1[0], l2[0])): print "".join(word.ljust(col_width) for word in row) else: for row in lines: print "".join(word.ljust(col_width) for word in row) return 0, None
def main(workspace=''): for service in models.get_services(workspace): if service.status != 'open' and service.status != 'opened': print('Deleted service: ' + service.name) models.delete_service(workspace, service.id)