Exemple #1
0
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)
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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
Exemple #6
0
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
Exemple #8
0
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
Exemple #9
0
 def get_services(self, **params):
     return models.get_services(self.active_workspace, **params)
Exemple #10
0
 def get_services(self, **params):
     return models.get_services(self.active_workspace, **params)
Exemple #11
0
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
Exemple #12
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)
Exemple #13
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)
Exemple #14
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)