def createAndAddInterface( self, host_id, name="", mac="00:00:00:00:00:00", ipv4_address="0.0.0.0", ipv4_mask="0.0.0.0", ipv4_gateway="0.0.0.0", ipv4_dns=[], ipv6_address="0000:0000:0000:0000:0000:0000:0000:0000", ipv6_prefix="00", ipv6_gateway="0000:0000:0000:0000:0000:0000:0000:0000", ipv6_dns=[], network_segment="", hostname_resolution=[]): # We don't use interface anymore, so return a host id to maintain # backwards compatibility # Little hack because we dont want change all the plugins for add hostnames in Host object. # SHRUG try: host = get_host(self.workspace, host_id=host_id) host.hostnames = hostname_resolution update_host(self.workspace, host, command_id=self.command_id) except: logger.info( "Error updating Host with right hostname resolution...") return host_id
def main(workspace='', args=None, parser=None): parser.add_argument('name', help='Host name') parser.add_argument('os', help='OS') parser.add_argument( '--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) obj = factory.createModelObject(models.Host.class_signature, parsed_args.name, workspace, os=parsed_args.os, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) else: print "A host with ID %s already exists!" % obj.getID() return 2, None return 0, obj.getID()
def main(workspace='', args=None, parser=None): parser.add_argument('ip', help='Host IP') parser.add_argument('os', help='OS') parser.add_argument('mac', help='Interface MAC Address') parser.add_argument('--gateway', help='IPV4 or IPV6 Gateway', default='0.0.0.0') parser.add_argument('--netsegment', help='Network Segment', default='') parser.add_argument( '--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) params = { 'ip': parsed_args.ip, } obj_host = factory.createModelObject( models.Host.class_signature, parsed_args.ip, workspace, os=parsed_args.os, mac=parsed_args.mac, network_segment=parsed_args.netsegment, parent_id=None) old_host = models.get_host(workspace, **params) if old_host is None: if not parsed_args.dry_run: models.create_host(workspace, obj_host) old_host = models.get_host(workspace, **params) else: return 0, None else: print "A host with ID %s already exists!" % old_host.getID() return 2, None return 0, old_host.getID()
def main(workspace='', args=None, parser=None): parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output from the pcapfile library.') parser.add_argument('pcap', help='Path to the PCAP file'), parsed_args = parser.parse_args(args) try: from scapy.all import PcapReader except ImportError: print 'capfile not found, please install it to use this plugin.' \ ' You can do install it by executing pip2 install scapy in a shell.' return 1, None if not os.path.isfile(parsed_args.pcap): print "pcap file not found: " % parsed_args.pcap return 2, None pcap = PcapReader(parsed_args.pcap) for (domain, ip) in get_domain_resolutions(pcap): obj = factory.createModelObject(models.Host.class_signature, ip, workspace, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: models.create_host(workspace, obj) interface = factory.createModelObject( models.Interface.class_signature, '', workspace, # mac=bssid, ipv4_address=ip, ipv4_gateway='', ipv4_mask='', ipv4_dns='', ipv6_address='', ipv6_gateway='', ipv6_prefix='', ipv6_dns='', network_segment='', hostnames=[domain], parent_id=obj.getID()) old = models.get_interface(workspace, obj.getID()) if old is None: try: models.create_interface(workspace, interface) except: pass 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 main(workspace='', args=None, parser=None): parser.add_argument('ip', help='Host IP') parser.add_argument('os', help='OS') parser.add_argument('mac', help='Interface MAC Address') parser.add_argument('--gateway', help='IPV4 or IPV6 Gateway', default='0.0.0.0') parser.add_argument('--netsegment', help='Network Segment', default='') parser.add_argument('--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) params = { 'ip': parsed_args.ip, } obj_host = factory.createModelObject(models.Host.class_signature, parsed_args.ip, workspace, os=parsed_args.os, mac=parsed_args.mac, network_segment=parsed_args.netsegment, parent_id=None) old_host = models.get_host(workspace, **params) if old_host is None: if not parsed_args.dry_run: models.create_host(workspace, obj_host) old_host = models.get_host(workspace, **params) else: return 0, None else: print("A host with ID %s already exists!" % old_host.getID()) return 2, None return 0, old_host.getID()
def createAndAddInterface( self, host_id, name="", mac="00:00:00:00:00:00", ipv4_address="0.0.0.0", ipv4_mask="0.0.0.0", ipv4_gateway="0.0.0.0", ipv4_dns=[], ipv6_address="0000:0000:0000:0000:0000:0000:0000:0000", ipv6_prefix="00", ipv6_gateway="0000:0000:0000:0000:0000:0000:0000:0000", ipv6_dns=[], network_segment="", hostname_resolution=[]): # We don't use interface anymore, so return a host id to maintain # backwards compatibility # Little hack because we dont want change all the plugins for add hostnames in Host object. # SHRUG try: host = get_host(self.workspace, host_id=host_id) host.hostnames = hostname_resolution update_host(self.workspace, host, command_id=self.command_id) except: logger.info("Error updating Host with right hostname resolution...") return host_id
def main(workspace='', args=None, parser=None): parser.add_argument('name', help='Host name') parser.add_argument('os', help='OS') parser.add_argument('--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) obj = factory.createModelObject(models.Host.class_signature, parsed_args.name, workspace, os=parsed_args.os, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) else: print "A host with ID %s already exists!" % obj.getID() return 2, None return 0, obj.getID()
def main(workspace='', args=None, parser=None): parser.add_argument('host_name', help='Host name') parser.add_argument('os', help='OS') parser.add_argument('interface_name', help='Interface Name') parser.add_argument('mac', help='Interface MAC Address') parser.add_argument('--ipv4address', help='IPV4 Address', default='0.0.0.0') parser.add_argument('--ipv4gateway', help='IPV4 Gateway', default='0.0.0.0') parser.add_argument('--ipv4mask', help='IPV4 Mask', default='0.0.0.0') parser.add_argument('--ipv4dns', help='IPV4 DNS, as a comma separated list', default='[]') parser.add_argument('--ipv6address', help='IPV6 Address', default='0000:0000:0000:0000:0000:0000:0000:0000') parser.add_argument('--ipv6prefix', help='IPV6 Prefix', default='00') parser.add_argument('--ipv6gateway', help='IPV4 Gateway', default='0000:0000:0000:0000:0000:0000:0000:0000') parser.add_argument('--ipv6dns', help='IPV6 DNS, as a comma separated list', default='') parser.add_argument('--netsegment', help='Network Segment', default='') parser.add_argument('--hostres', help='Hostname Resolution', default='') parser.add_argument('--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) obj_host = factory.createModelObject(models.Host.class_signature, parsed_args.host_name, workspace, os=parsed_args.os, parent_id=None) old_host = models.get_host(workspace, obj_host.getID()) if old_host is None: if not parsed_args.dry_run: models.create_host(workspace, obj_host) else: print "A host with ID %s already exists!" % obj_host.getID() return 2, None obj_interface = factory.createModelObject(models.Interface.class_signature, parsed_args.interface_name, workspace, mac=parsed_args.mac, ipv4_address=parsed_args.ipv4address, ipv4_mask=parsed_args.ipv4mask, ipv4_gateway=parsed_args.ipv4gateway, ipv4_dns=parsed_args.ipv4dns, ipv6_address=parsed_args.ipv6address, ipv6_prefix=parsed_args.ipv6prefix, ipv6_gateway=parsed_args.ipv6gateway, ipv6_dns=parsed_args.ipv6dns, network_segment=parsed_args.netsegment, hostname_resolution=parsed_args.hostres, parent_id= obj_host.getID() ) old_interface = models.get_interface(workspace, obj_interface.getID()) if old_interface is None: if not parsed_args.dry_run: models.create_interface(workspace, obj_interface) else: print "An interface with ID %s already exists!" % obj_interface.getID() return 2, None return 0, obj_interface.getID()
SERVICES = { 'http': [80, 443, 8080, 8443], 'ftp': [21], 'ssh': [22], 'telnet': [23], 'smtp': [25], 'domain': [53], 'pop3': [110, 995], 'imap': [143, 993], 'vnc': [5900], } # FIXME Update when persistence API changes COLUMNS = { 'host': lambda service, workspace: models.get_host(workspace, service.getParent() ).name, 'host_os': lambda service, workspace: models.get_host(workspace, service.getParent()). os, 'service': lambda service, workspace: service.name, 'ports': lambda service, workspace: str(service.ports[0]), 'protocol': lambda service, workspace: service.protocol, 'status': lambda service, workspace: service.status, } def main(workspace='', args=None, parser=None):
def get_host(self, host_id): return models.get_host(self.active_workspace, host_id)
def main(workspace="", args=None, parser=None): WORKSPACE = workspace parser.add_argument("--csv", help="Csv file to import") parsed_args = parser.parse_args(args) if not parsed_args.csv: print "Error: Give a CSV file to import with --csv" return 2, None try: file_csv = open(parsed_args.csv, "r") except: print "Error: Unreadeable CSV file, check the path" raise counter = 0 csv_reader = csv.DictReader(file_csv, delimiter=",", quotechar='"') for register in csv_reader: try: host, service, vulnerability, vulnerability_web = parse_register(register) # Set all IDs and create objects if host is not None: old_host = models.get_host(WORKSPACE, ip=host.getName()) if not old_host: counter += 1 print "New host: " + host.getName() try: models.create_host(WORKSPACE, host) except Exception as ex: import ipdb; ipdb.set_trace() host = models.get_host(WORKSPACE, ip=host.getName()) if service is not None: service.setParent(host.getID()) service_params = { 'name': service.getName(), 'port': service.getPorts()[0], 'protocol': service.getProtocol(), 'host_id': service.getParent() } old_service = models.get_service(WORKSPACE, **service_params) if not old_service: counter += 1 print "New service: " + service.getName() models.create_service(WORKSPACE, service) service = models.get_service(WORKSPACE, **service_params) # Check if Service exist, then create the vuln with parent Service. # If not exist the Service, create the vuln with parent Host. if vulnerability is not None: if host and not service: parent_type = 'Host' parent_id = host.getID() if host and service: parent_type = 'Service' parent_id = service.getID() vulnerability.setParent(parent_id) vulnerability.setParentType(parent_type) vuln_params = { 'name': vulnerability.getName(), 'description': vulnerability.getDescription(), 'parent_type': parent_type, 'parent': parent_id, } if not models.get_vuln(WORKSPACE, **vuln_params): counter += 1 print "New vulnerability: " + vulnerability.getName() models.create_vuln(WORKSPACE, vulnerability) elif vulnerability_web is not None: vuln_web_params = { 'name': vulnerability_web.getName(), 'description': vulnerability_web.getDescription(), 'parent': service.getID(), 'parent_type': 'Service', 'method': vulnerability_web.getMethod(), 'parameter_name': vulnerability_web.getParams(), 'path': vulnerability_web.getPath(), 'website': vulnerability_web.getWebsite(), } vulnerability_web.setParent(service.getID()) if not models.get_web_vuln(WORKSPACE, **vuln_web_params): counter += 1 print "New web vulnerability: " + vulnerability_web.getName() models.create_vuln_web(WORKSPACE, vulnerability_web) except ConflictInDatabase: print('Conflict in Database, skiping csv row') except CantCommunicateWithServerError as ex: print(register) print('Error', ex) print "[*]", counter, "new Faraday objects created." file_csv.close() return 0, None
def main(workspace="", args=None, parser=None): WORKSPACE = workspace parser.add_argument("--csv", help="Csv file to import") parsed_args = parser.parse_args(args) if not parsed_args.csv: print "Error: Give a CSV file to import with --csv" return 2, None try: file_csv = open(parsed_args.csv, "r") except: print "Error: Unreadeable CSV file, check the path" raise counter = 0 csv_reader = csv.DictReader(file_csv, delimiter=",", quotechar='"') for register in csv_reader: host, interface, service, vulnerability, vulnerability_web = parse_register(register) # Set all IDs and create objects if host is not None: host.setID(None) if not models.get_host(WORKSPACE, host.getID()): counter += 1 print "New host: " + host.getName() models.create_host(WORKSPACE, host) if interface is not None: interface.setID(host.getID()) if not models.get_interface(WORKSPACE, interface.getID()): counter += 1 print "New interface: " + interface.getName() models.create_interface(WORKSPACE, interface) if service is not None: service.setID(interface.getID()) if not models.get_service(WORKSPACE, service.getID()): counter += 1 print "New service: " + service.getName() models.create_service(WORKSPACE, service) # Check if Service exist, then create the vuln with parent Service. # If not exist the Service, create the vuln with parent Host. if vulnerability is not None: if service is None: vulnerability.setID(host.getID()) else: vulnerability.setID(service.getID()) if not models.get_vuln(WORKSPACE, vulnerability.getID()): counter += 1 print "New vulnerability: " + vulnerability.getName() models.create_vuln(WORKSPACE, vulnerability) elif vulnerability_web is not None: vulnerability_web.setID(service.getID()) if not models.get_web_vuln(WORKSPACE, vulnerability_web.getID()): counter += 1 print "New web vulnerability: " + vulnerability_web.getName() models.create_vuln_web(WORKSPACE, vulnerability_web) print "[*]", counter, "new Faraday objects created." file_csv.close() return 0, None
def main(workspace='', args=None, parser=None): parser.add_argument('-s', '--source', nargs='*', help='Filter packets by source'), parser.add_argument('-d', '--dest', nargs='*', help='Filter packets by destination'), parser.add_argument( '--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output from the pcapfile library.') parser.add_argument('pcap', help='Path to the PCAP file'), parsed_args = parser.parse_args(args) try: from pcapfile import savefile import pcapfile except ImportError: print 'capfile not found, please install it to use this plugin.' \ ' You can do it executing pip2 install pcapfile in a shell.' return 1, None if not os.path.isfile(parsed_args.pcap): print "pcap file not found: " % parsed_args.pcap return 2, None testcap = open(parsed_args.pcap, 'rb') try: capfile = savefile.load_savefile(testcap, layers=2, verbose=parsed_args.verbose) except pcapfile.Error: print "Invalid pcap file" return 3, None print 'pcap file loaded. Parsing packets...' # Set() to store already added hosts. This will save an enormous amount of time by not querying the database # for hosts we already know are in Faraday added = set() for packet in capfile.packets: if packet.packet.type != 2048: continue src = packet.packet.payload.src dst = packet.packet.payload.dst if parsed_args.source and not src in parsed_args.source: continue if parsed_args.dest and not dst in parsed_args.dest: continue if src not in added: # Lets save additional queries for this IP, it will already be on the database anyway! added.add(packet.packet.payload.src) # Parsing of source field obj = factory.createModelObject(models.Host.class_signature, src, workspace, os=None, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) print '%s\t%s' % (src, obj.getID()) if dst not in added: # Lets save additional queries for this IP, it will already be on the database anyway! added.add(packet.packet.payload.dst) # Parsing of destination field obj = factory.createModelObject(models.Host.class_signature, dst, workspace, os=None, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) print '%s\t%s' % (dst, obj.getID()) return 0, None
SERVICES = { 'http': [80, 443, 8080, 8443], 'ftp': [21], 'ssh': [22], 'telnet': [23], 'smtp': [25], 'domain': [53], 'pop3': [110, 995], 'imap': [143, 993], 'vnc': [5900], } # FIXME Update when persistence API changes COLUMNS = { 'host': lambda service, workspace: models.get_host(workspace, service.id.split('.')[0]).name, 'host_os': lambda service, workspace: models.get_host(workspace, service.id.split('.')[0]).os, 'service': lambda service, workspace: service.name, 'ports': lambda service, workspace: str(service.ports[0]), 'protocol': lambda service, workspace: service.protocol, 'status': lambda service, workspace: service.status, } 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.')
def main(workspace='', args=None, parser=None): parser.add_argument('-s', '--source', nargs='*', help='Filter packets by source'), parser.add_argument('-d', '--dest', nargs='*', help='Filter packets by destination'), parser.add_argument('--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output from the pcapfile library.') parser.add_argument('pcap', help='Path to the PCAP file'), parsed_args = parser.parse_args(args) try: from pcapfile import savefile import pcapfile except ImportError: print 'capfile not found, please install it to use this plugin.' \ ' You can do it executing pip2 install pcapfile in a shell.' return 1, None if not os.path.isfile(parsed_args.pcap): print "pcap file not found: " % parsed_args.pcap return 2, None testcap = open(parsed_args.pcap, 'rb') try: capfile = savefile.load_savefile(testcap, layers=2, verbose=parsed_args.verbose) except pcapfile.Error: print "Invalid pcap file" return 3, None print 'pcap file loaded. Parsing packets...' # Set() to store already added hosts. This will save an enormous amount of time by not querying the database # for hosts we already know are in Faraday added = set() for packet in capfile.packets: if packet.packet.type != 2048: continue src = packet.packet.payload.src dst = packet.packet.payload.dst if parsed_args.source and not src in parsed_args.source: continue if parsed_args.dest and not dst in parsed_args.dest: continue if src not in added: # Lets save additional queries for this IP, it will already be on the database anyway! added.add(packet.packet.payload.src) # Parsing of source field obj = factory.createModelObject(models.Host.class_signature, src, workspace, os=None, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) print '%s\t%s' % (src, obj.getID()) if dst not in added: # Lets save additional queries for this IP, it will already be on the database anyway! added.add(packet.packet.payload.dst) # Parsing of destination field obj = factory.createModelObject(models.Host.class_signature, dst, workspace, os=None, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) print '%s\t%s' % (dst, obj.getID()) return 0, None
def main(workspace='', args=None, parser=None): parser.add_argument('host_name', help='Host name') parser.add_argument('os', help='OS') parser.add_argument('interface_name', help='Interface Name') parser.add_argument('mac', help='Interface MAC Address') parser.add_argument('--ipv4address', help='IPV4 Address', default='0.0.0.0') parser.add_argument('--ipv4gateway', help='IPV4 Gateway', default='0.0.0.0') parser.add_argument('--ipv4mask', help='IPV4 Mask', default='0.0.0.0') parser.add_argument('--ipv4dns', help='IPV4 DNS, as a comma separated list', default='[]') parser.add_argument('--ipv6address', help='IPV6 Address', default='0000:0000:0000:0000:0000:0000:0000:0000') parser.add_argument('--ipv6prefix', help='IPV6 Prefix', default='00') parser.add_argument('--ipv6gateway', help='IPV4 Gateway', default='0000:0000:0000:0000:0000:0000:0000:0000') parser.add_argument('--ipv6dns', help='IPV6 DNS, as a comma separated list', default='') parser.add_argument('--netsegment', help='Network Segment', default='') parser.add_argument('--hostres', help='Hostname Resolution', default='') parser.add_argument( '--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) obj_host = factory.createModelObject(models.Host.class_signature, parsed_args.host_name, workspace, os=parsed_args.os, parent_id=None) old_host = models.get_host(workspace, obj_host.getID()) if old_host is None: if not parsed_args.dry_run: models.create_host(workspace, obj_host) else: print "A host with ID %s already exists!" % obj_host.getID() return 2, None obj_interface = factory.createModelObject( models.Interface.class_signature, parsed_args.interface_name, workspace, mac=parsed_args.mac, ipv4_address=parsed_args.ipv4address, ipv4_mask=parsed_args.ipv4mask, ipv4_gateway=parsed_args.ipv4gateway, ipv4_dns=parsed_args.ipv4dns, ipv6_address=parsed_args.ipv6address, ipv6_prefix=parsed_args.ipv6prefix, ipv6_gateway=parsed_args.ipv6gateway, ipv6_dns=parsed_args.ipv6dns, network_segment=parsed_args.netsegment, hostname_resolution=parsed_args.hostres, parent_id=obj_host.getID()) old_interface = models.get_interface(workspace, obj_interface.getID()) if old_interface is None: if not parsed_args.dry_run: models.create_interface(workspace, obj_interface) else: print "An interface with ID %s already exists!" % obj_interface.getID() return 2, None return 0, obj_interface.getID()
def main(workspace="", args=None, parser=None): WORKSPACE = workspace parser.add_argument("--csv", help="Csv file to import") parsed_args = parser.parse_args(args) if not parsed_args.csv: print "Error: Give a CSV file to import with --csv" return 2, None try: file_csv = open(parsed_args.csv, "r") except: print "Error: Unreadeable CSV file, check the path" raise counter = 0 csv_reader = csv.DictReader(file_csv, delimiter=",", quotechar='"') for register in csv_reader: host, service, vulnerability, vulnerability_web = parse_register(register) # Set all IDs and create objects if host is not None: old_host = models.get_host(WORKSPACE, ip=host.getName()) if not old_host: counter += 1 print "New host: " + host.getName() models.create_host(WORKSPACE, host) host = models.get_host(WORKSPACE, ip=host.getName()) if service is not None: service.setParent(host.getID()) service_params = { 'name': service.getName(), 'port': service.getPorts()[0], 'protocol': service.getProtocol(), 'host_id': service.getParent() } old_service = models.get_service(WORKSPACE, **service_params) if not old_service: counter += 1 print "New service: " + service.getName() models.create_service(WORKSPACE, service) service = models.get_service(WORKSPACE, **service_params) # Check if Service exist, then create the vuln with parent Service. # If not exist the Service, create the vuln with parent Host. if vulnerability is not None: if host and not service: parent_type = 'Host' parent_id = host.getID() if host and service: parent_type = 'Service' parent_id = service.getID() vulnerability.setParent(parent_id) vulnerability.setParentType(parent_type) vuln_params = { 'name': vulnerability.getName(), 'description': vulnerability.getDescription(), 'parent_type': parent_type, 'parent': parent_id, } if not models.get_vuln(WORKSPACE, **vuln_params): counter += 1 print "New vulnerability: " + vulnerability.getName() models.create_vuln(WORKSPACE, vulnerability) elif vulnerability_web is not None: vuln_web_params = { 'name': vulnerability_web.getName(), 'description': vulnerability_web.getDescription(), 'parent': service.getID(), 'parent_type': 'Service', 'method': vulnerability_web.getMethod(), 'parameter_name': vulnerability_web.getParams(), 'path': vulnerability_web.getPath(), 'website': vulnerability_web.getWebsite(), } vulnerability_web.setParent(service.getID()) if not models.get_web_vuln(WORKSPACE, **vuln_web_params): counter += 1 print "New web vulnerability: " + vulnerability_web.getName() models.create_vuln_web(WORKSPACE, vulnerability_web) print "[*]", counter, "new Faraday objects created." file_csv.close() return 0, None
SERVICES = { 'http': [80, 443, 8080, 8443], 'ftp': [21], 'ssh': [22], 'telnet': [23], 'smtp': [25], 'domain': [53], 'pop3': [110, 995], 'imap': [143, 993], 'vnc': [5900], } # FIXME Update when persistence API changes COLUMNS = { 'host': lambda service, workspace: models.get_host(workspace, service.id.split('.')[0]).name, 'host_os': lambda service, workspace: models.get_host(workspace, service.id.split('.')[0]).os, 'service': lambda service, workspace: service.name, 'ports': lambda service, workspace: str(service.ports[0]), 'protocol': lambda service, workspace: service.protocol, 'status': lambda service, workspace: service.status, } def main(workspace='', args=None, parser=None):
def main(workspace="", args=None, parser=None): WORKSPACE = workspace parser.add_argument("--csv", help="Csv file to import") parsed_args = parser.parse_args(args) if not parsed_args.csv: print "Error: Give a CSV file to import with --csv" return 2, None try: file_csv = open(parsed_args.csv, "r") except: print "Error: Unreadeable CSV file, check the path" raise counter = 0 csv_reader = csv.DictReader(file_csv, delimiter=",", quotechar='"') for register in csv_reader: host, interface, service, vulnerability, vulnerability_web = parse_register( register) # Set all IDs and create objects if host is not None: host.setID(None) if not models.get_host(WORKSPACE, host.getID()): counter += 1 print "New host: " + host.getName() models.create_host(WORKSPACE, host) if interface is not None: interface.setID(host.getID()) if not models.get_interface(WORKSPACE, interface.getID()): counter += 1 print "New interface: " + interface.getName() models.create_interface(WORKSPACE, interface) if service is not None: service.setID(interface.getID()) if not models.get_service(WORKSPACE, service.getID()): counter += 1 print "New service: " + service.getName() models.create_service(WORKSPACE, service) # Check if Service exist, then create the vuln with parent Service. # If not exist the Service, create the vuln with parent Host. if vulnerability is not None: if service is None: vulnerability.setID(host.getID()) else: vulnerability.setID(service.getID()) if not models.get_vuln(WORKSPACE, vulnerability.getID()): counter += 1 print "New vulnerability: " + vulnerability.getName() models.create_vuln(WORKSPACE, vulnerability) elif vulnerability_web is not None: vulnerability_web.setID(service.getID()) if not models.get_web_vuln(WORKSPACE, vulnerability_web.getID()): counter += 1 print "New web vulnerability: " + vulnerability_web.getName() models.create_vuln_web(WORKSPACE, vulnerability_web) print "[*]", counter, "new Faraday objects created." file_csv.close() return 0, None
SERVICES = { 'http': [80, 443, 8080, 8443], 'ftp': [21], 'ssh': [22], 'telnet': [23], 'smtp': [25], 'domain': [53], 'pop3': [110, 995], 'imap': [143, 993], 'vnc': [5900], } # FIXME Update when persistence API changes COLUMNS = { 'host': lambda service, workspace: models.get_host(workspace, service.getParent()).name, 'host_os': lambda service, workspace: models.get_host(workspace, service.getParent()).os, 'service': lambda service, workspace: service.name, 'ports': lambda service, workspace: str(service.ports[0]), 'protocol': lambda service, workspace: service.protocol, 'status': lambda service, workspace: service.status, } 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.')