Beispiel #1
0
 def addtoqueue(self, rule, target, remove=False):
     success = False
     target = target.encode('ascii')
     job = rule.strip().split(' ')[0]
     job_type = job.split('|')[0].lower()
     job_info = job.split('|')
     while (len(job) < 3):
         job_info.append('')
     if (not self.verifyjob(job_type, job_info)):
         return success
     if (util.ip.validate_ipv6(target) and (not self.ipv6)):
         dsz.ui.Echo(('Target %s is an IPv6 address; redirector has no IPv6 address, not queueing' % (target, job_type)), dsz.WARNING)
         return False
     if (util.ip.validate_ipv6(target) and (not self.supportipv6(job_type))):
         dsz.ui.Echo(('Target %s is an IPv6 address; %s does not support IPv6, not queueing' % (target, job_type)), dsz.WARNING)
         return False
     if (target in self.local_addresses):
         dsz.ui.Echo(('Target %s is one of the IP addresses on our redirector, not queueing' % target), dsz.WARNING)
         return False
     elif (util.ip.validate_ipv6(target) and (util.ip.expand_ipv6(target) in self.local_addresses)):
         dsz.ui.Echo(('Target %s is one of the IP addresses on our redirector, not queueing' % target), dsz.WARNING)
         return False
     excludes = scanbase.get_excludes(self.session)
     if (target in excludes):
         return False
     success = scanbase.write_job(self.session, job, target)
     scanbase.set_jobtype(self.session, job_type)
     if (not success):
         dsz.ui.Echo(('Job %s for target %s already exists' % (job, target)), dsz.WARNING)
     return success
Beispiel #2
0
 def handleupdate(self):
     dsz.ui.Echo(('Updating the queue for session: %s' % self.scansweep_env))
     (newrulelist, newqueuelist, removerule, removequeue) = self.checkupdate(self.scansweep_updatefile)
     if (len(newrulelist) > 0):
         for rule in newrulelist:
             rulelist = scanbase.get_escalate_rules(self.session)
             if (rule not in rulelist):
                 scanbase.write_escalate_rule(self.session, rule)
                 dsz.ui.Echo(('Escalation rule enabled: %s->%s' % (rule[0], rule[1])))
                 scanbase.set_jobtype(self.session, rule[1].split('|')[0])
     if (len(newqueuelist) > 0):
         for item in newqueuelist:
             if self.addtoqueue(item[0], item[1], self.scansweep_env):
                 dsz.ui.Echo(('Job added: %s %s' % (item[0], item[1])))
     if (len(removerule) > 0):
         for rule in removerule:
             rulelist = scanbase.get_escalate_rules(self.session)
             if (rule in rulelist):
                 scanbase.delete_escalate_rule(self.session, rule)
                 dsz.ui.Echo(('Escalation rule removed: %s->%s' % (rule[0], rule[1])))
     if (len(removequeue) > 0):
         for item in removequeue:
             if self.addtoqueue(item[0], item[1], self.scansweep_env, remove=True):
                 dsz.ui.Echo(('Job removed: %s %s' % (item[0], item[1])))
                 pass
Beispiel #3
0
 def addlisttoqueue(self, target_dict):
     excludes = scanbase.get_excludes(self.session)
     for rule in target_dict.keys():
         target_list = target_dict[rule]
         job = rule.strip().split(' ')[0]
         job_type = job.split('|')[0].lower()
         job_info = job.split('|')
         while (len(job) < 3):
             job_info.append('')
         if (not self.verifyjob(job_type, job_info)):
             continue
         job_list = []
         for target in target_list:
             if (util.ip.validate_ipv6(target) and (not self.ipv6)):
                 dsz.ui.Echo(('Target %s is an IPv6 address; redirector has no IPv6 address, not queueing' % (target, job_type)), dsz.WARNING)
                 return False
             if (util.ip.validate_ipv6(target) and (not self.supportipv6(job_type))):
                 dsz.ui.Echo(('Target %s is an IPv6 address; %s does not support IPv6, not queueing' % (target, job_type)), dsz.WARNING)
                 return False
             if (target in self.local_addresses):
                 dsz.ui.Echo(('Target %s is one of the IP addresses on our redirector, not queueing' % target), dsz.WARNING)
                 continue
             elif (util.ip.validate_ipv6(target) and (util.ip.expand_ipv6(target) in self.local_addresses)):
                 dsz.ui.Echo(('Target %s is one of the IP addresses on our redirector, not queueing' % target), dsz.WARNING)
                 continue
             if (target in excludes):
                 continue
             job_list.append([job, target])
         scanbase.set_jobtype(self.session, job_type)
         scanbase.write_job_list(self.session, job_list)
Beispiel #4
0
 def handleupdate(self):
     dsz.ui.Echo(
         ('Updating the queue for session: %s' % self.scansweep_env))
     (newrulelist, newqueuelist, removerule,
      removequeue) = self.checkupdate(self.scansweep_updatefile)
     if (len(newrulelist) > 0):
         for rule in newrulelist:
             rulelist = scanbase.get_escalate_rules(self.session)
             if (rule not in rulelist):
                 scanbase.write_escalate_rule(self.session, rule)
                 dsz.ui.Echo(('Escalation rule enabled: %s->%s' %
                              (rule[0], rule[1])))
                 scanbase.set_jobtype(self.session, rule[1].split('|')[0])
     if (len(newqueuelist) > 0):
         for item in newqueuelist:
             if self.addtoqueue(item[0], item[1], self.scansweep_env):
                 dsz.ui.Echo(('Job added: %s %s' % (item[0], item[1])))
     if (len(removerule) > 0):
         for rule in removerule:
             rulelist = scanbase.get_escalate_rules(self.session)
             if (rule in rulelist):
                 scanbase.delete_escalate_rule(self.session, rule)
                 dsz.ui.Echo(('Escalation rule removed: %s->%s' %
                              (rule[0], rule[1])))
     if (len(removequeue) > 0):
         for item in removequeue:
             if self.addtoqueue(item[0],
                                item[1],
                                self.scansweep_env,
                                remove=True):
                 dsz.ui.Echo(('Job removed: %s %s' % (item[0], item[1])))
                 pass
Beispiel #5
0
 def addtoqueue(self, rule, target, remove=False):
     success = False
     target = target.encode('ascii')
     job = rule.strip().split(' ')[0]
     job_type = job.split('|')[0].lower()
     job_info = job.split('|')
     while (len(job) < 3):
         job_info.append('')
     if (not self.verifyjob(job_type, job_info)):
         return success
     if (util.ip.validate_ipv6(target) and (not self.ipv6)):
         dsz.ui.Echo(('Target %s is an IPv6 address; redirector has no IPv6 address, not queueing' % (target, job_type)), dsz.WARNING)
         return False
     if (util.ip.validate_ipv6(target) and (not self.supportipv6(job_type))):
         dsz.ui.Echo(('Target %s is an IPv6 address; %s does not support IPv6, not queueing' % (target, job_type)), dsz.WARNING)
         return False
     if (target in self.local_addresses):
         dsz.ui.Echo(('Target %s is one of the IP addresses on our redirector, not queueing' % target), dsz.WARNING)
         return False
     elif (util.ip.validate_ipv6(target) and (util.ip.expand_ipv6(target) in self.local_addresses)):
         dsz.ui.Echo(('Target %s is one of the IP addresses on our redirector, not queueing' % target), dsz.WARNING)
         return False
     excludes = scanbase.get_excludes(self.session)
     if (target in excludes):
         return False
     success = scanbase.write_job(self.session, job, target)
     scanbase.set_jobtype(self.session, job_type)
     if (not success):
         dsz.ui.Echo(('Job %s for target %s already exists' % (job, target)), dsz.WARNING)
     return success
Beispiel #6
0
 def addlisttoqueue(self, target_dict):
     excludes = scanbase.get_excludes(self.session)
     for rule in target_dict.keys():
         target_list = target_dict[rule]
         job = rule.strip().split(' ')[0]
         job_type = job.split('|')[0].lower()
         job_info = job.split('|')
         while (len(job) < 3):
             job_info.append('')
         if (not self.verifyjob(job_type, job_info)):
             continue
         job_list = []
         for target in target_list:
             if (util.ip.validate_ipv6(target) and (not self.ipv6)):
                 dsz.ui.Echo(('Target %s is an IPv6 address; redirector has no IPv6 address, not queueing' % (target, job_type)), dsz.WARNING)
                 return False
             if (util.ip.validate_ipv6(target) and (not self.supportipv6(job_type))):
                 dsz.ui.Echo(('Target %s is an IPv6 address; %s does not support IPv6, not queueing' % (target, job_type)), dsz.WARNING)
                 return False
             if (target in self.local_addresses):
                 dsz.ui.Echo(('Target %s is one of the IP addresses on our redirector, not queueing' % target), dsz.WARNING)
                 continue
             elif (util.ip.validate_ipv6(target) and (util.ip.expand_ipv6(target) in self.local_addresses)):
                 dsz.ui.Echo(('Target %s is one of the IP addresses on our redirector, not queueing' % target), dsz.WARNING)
                 continue
             if (target in excludes):
                 continue
             job_list.append([job, target])
         scanbase.set_jobtype(self.session, job_type)
         scanbase.write_job_list(self.session, job_list)
Beispiel #7
0
def main(arguments):
    scanbase.setup_db()
    failout = False
    scansweepHelper = helper.scansweepHelper([x.lower() for x in arguments])
    scansweepHelper.check_env()
    create_mode = False
    if (scansweepHelper.options.database is not None):
        database_op = scansweepHelper.options.database
        if (not (database_op == 'create')):
            if (scansweepHelper.options.session is not None):
                scansweepHelper.database_display(database_op)
            else:
                scansweepHelper.database_display(database_op)
            return
        else:
            create_mode = True
    if (scansweepHelper.options.update is not None):
        scansweepHelper.handleupdate()
        return
    scanbase.write_metadata(scansweepHelper.scansweep_env,
                            scansweepHelper.session,
                            scansweepHelper.scansweep_logfile,
                            scansweepHelper.scansweep_results,
                            scansweepHelper.verbose)
    if (scansweepHelper.options.exclude is not None):
        scansweepHelper.parseexcludes(scansweepHelper.options.exclude)
    if (scansweepHelper.session == scansweepHelper.scansweep_env):
        if ((scansweepHelper.options.monitor is None)
                and (scansweepHelper.options.type is None)):
            dsz.ui.Echo('You must specify a type.', dsz.ERROR)
            return 0
        if ((scansweepHelper.options.monitor is None)
                and os.path.exists(scansweepHelper.options.type[0])):
            if (scansweepHelper.options.target is not None):
                dsz.ui.Echo(
                    'You cannot use -target when specifying a queue file.',
                    dsz.ERROR)
                return 0
            queuefile = scansweepHelper.options.type[0]
            if (not scansweepHelper.verifyqueue(queuefile)):
                failout = True
            else:
                queuelist = scansweepHelper.getqueuefromfile(queuefile)
                for item in queuelist:
                    scansweepHelper.addtoqueue(item[0], item[1],
                                               scansweepHelper.scansweep_env)
        elif (scansweepHelper.options.type is not None):
            job_type = scansweepHelper.options.type[0].lower()
            job = '|'.join(scansweepHelper.options.type)
            if (not scansweepHelper.verifyjob(job_type,
                                              scansweepHelper.options.type)):
                dsz.ui.Echo(
                    'Invalid -type options, please verify your parameters.',
                    dsz.ERROR)
                return 0
            candidate_list = []
            if (scansweepHelper.options.target is not None):
                if (type(scansweepHelper.options.target) == type([])):
                    for target_flag in scansweepHelper.options.target:
                        candidate_list.extend(
                            scansweepHelper.parsetarget(target_flag))
                else:
                    candidate_list = scansweepHelper.parsetarget(
                        scansweepHelper.options.target)
            else:
                dsz.ui.Echo('You must provide some targets with your scan.',
                            dsz.ERROR)
                return 0
            if ((len(candidate_list) > 255)
                    and (not scansweepHelper.options.cidroverride)):
                dsz.ui.Echo(
                    'You cannot specify more then 255 targets without the -cidroverride option',
                    dsz.ERROR)
                failout = True
            else:
                scansweepHelper.addlisttoqueue({job: candidate_list})
        if (scansweepHelper.monitor is not None):
            for monitortype in scansweepHelper.monitor:
                if (scansweepHelper.verifymonitor(monitortype) is False):
                    dsz.ui.Echo(
                        ('%s is an invalid monitor type' % monitortype))
                    failout = True
        if ((scanbase.num_jobs(scansweepHelper.session) > 255)
                and (not scansweepHelper.options.cidroverride)):
            dsz.ui.Echo(
                'You cannot specify more then 255 targets without the -cidroverride option',
                dsz.ERROR)
            failout = True
        if (scansweepHelper.options.escalate is not None):
            rulelist = scansweepHelper.parseescalate(
                scansweepHelper.options.escalate)
            if (len(rulelist) == 0):
                dsz.ui.Echo(
                    'You specified -escalate, but had only invalid rules. Exiting.',
                    dsz.ERROR)
                failout = True
            for rule in rulelist:
                scantype = rule[1].split('|')[0]
                current_rulelist = scanbase.get_escalate_rules(
                    scansweepHelper.session)
                if (rule not in current_rulelist):
                    scanbase.write_escalate_rule(scansweepHelper.session, rule)
                if (not (scantype == 'alert')):
                    scanbase.set_jobtype(scansweepHelper.session, scantype)
    elif ((scansweepHelper.options.type is not None)
          or (scansweepHelper.options.target is not None)):
        dsz.ui.Echo('You cannot specify -target or -type when using -session.',
                    dsz.WARNING)
        failout = True
    else:
        dsz.ui.Echo(
            'You are joining another session, and so will use the already available job queue and escalate rules.',
            dsz.WARNING)
    if (not scansweepHelper.verifytime(
            scanbase.get_jobtypes(scansweepHelper.session))):
        failout = True
    if failout:
        return 0
    scansweepHelper.printconfig()
    if create_mode:
        dsz.ui.Echo('Ran in create mode. Exiting.', dsz.WARNING)
        return
    dsz.lp.RecordToolUse('scansweep',
                         scansweepHelper.toolversion,
                         usage='EXERCISED',
                         comment=' '.join([x.lower() for x in arguments]))
    try:
        scan(scansweepHelper)
    finally:
        dsz.ui.Echo(('=' * 100))
        scansweepHelper.showstats()
        print '\n\n'
        scansweepHelper.generateresults(quiet=False)
Beispiel #8
0
def main(arguments):
    scanbase.setup_db()
    failout = False
    scansweepHelper = helper.scansweepHelper([x.lower() for x in arguments])
    scansweepHelper.check_env()
    create_mode = False
    if (scansweepHelper.options.database is not None):
        database_op = scansweepHelper.options.database
        if (not (database_op == 'create')):
            if (scansweepHelper.options.session is not None):
                scansweepHelper.database_display(database_op)
            else:
                scansweepHelper.database_display(database_op)
            return
        else:
            create_mode = True
    if (scansweepHelper.options.update is not None):
        scansweepHelper.handleupdate()
        return
    scanbase.write_metadata(scansweepHelper.scansweep_env, scansweepHelper.session, scansweepHelper.scansweep_logfile, scansweepHelper.scansweep_results, scansweepHelper.verbose)
    if (scansweepHelper.options.exclude is not None):
        scansweepHelper.parseexcludes(scansweepHelper.options.exclude)
    if (scansweepHelper.session == scansweepHelper.scansweep_env):
        if ((scansweepHelper.options.monitor is None) and (scansweepHelper.options.type is None)):
            dsz.ui.Echo('You must specify a type.', dsz.ERROR)
            return 0
        if ((scansweepHelper.options.monitor is None) and os.path.exists(scansweepHelper.options.type[0])):
            if (scansweepHelper.options.target is not None):
                dsz.ui.Echo('You cannot use -target when specifying a queue file.', dsz.ERROR)
                return 0
            queuefile = scansweepHelper.options.type[0]
            if (not scansweepHelper.verifyqueue(queuefile)):
                failout = True
            else:
                queuelist = scansweepHelper.getqueuefromfile(queuefile)
                for item in queuelist:
                    scansweepHelper.addtoqueue(item[0], item[1], scansweepHelper.scansweep_env)
        elif (scansweepHelper.options.type is not None):
            job_type = scansweepHelper.options.type[0].lower()
            job = '|'.join(scansweepHelper.options.type)
            if (not scansweepHelper.verifyjob(job_type, scansweepHelper.options.type)):
                dsz.ui.Echo('Invalid -type options, please verify your parameters.', dsz.ERROR)
                return 0
            candidate_list = []
            if (scansweepHelper.options.target is not None):
                if (type(scansweepHelper.options.target) == type([])):
                    for target_flag in scansweepHelper.options.target:
                        candidate_list.extend(scansweepHelper.parsetarget(target_flag))
                else:
                    candidate_list = scansweepHelper.parsetarget(scansweepHelper.options.target)
            else:
                dsz.ui.Echo('You must provide some targets with your scan.', dsz.ERROR)
                return 0
            if ((len(candidate_list) > 255) and (not scansweepHelper.options.cidroverride)):
                dsz.ui.Echo('You cannot specify more then 255 targets without the -cidroverride option', dsz.ERROR)
                failout = True
            else:
                scansweepHelper.addlisttoqueue({job: candidate_list})
        if (scansweepHelper.monitor is not None):
            for monitortype in scansweepHelper.monitor:
                if (scansweepHelper.verifymonitor(monitortype) is False):
                    dsz.ui.Echo(('%s is an invalid monitor type' % monitortype))
                    failout = True
        if ((scanbase.num_jobs(scansweepHelper.session) > 255) and (not scansweepHelper.options.cidroverride)):
            dsz.ui.Echo('You cannot specify more then 255 targets without the -cidroverride option', dsz.ERROR)
            failout = True
        if (scansweepHelper.options.escalate is not None):
            rulelist = scansweepHelper.parseescalate(scansweepHelper.options.escalate)
            if (len(rulelist) == 0):
                dsz.ui.Echo('You specified -escalate, but had only invalid rules. Exiting.', dsz.ERROR)
                failout = True
            for rule in rulelist:
                scantype = rule[1].split('|')[0]
                current_rulelist = scanbase.get_escalate_rules(scansweepHelper.session)
                if (rule not in current_rulelist):
                    scanbase.write_escalate_rule(scansweepHelper.session, rule)
                if (not (scantype == 'alert')):
                    scanbase.set_jobtype(scansweepHelper.session, scantype)
    elif ((scansweepHelper.options.type is not None) or (scansweepHelper.options.target is not None)):
        dsz.ui.Echo('You cannot specify -target or -type when using -session.', dsz.WARNING)
        failout = True
    else:
        dsz.ui.Echo('You are joining another session, and so will use the already available job queue and escalate rules.', dsz.WARNING)
    if (not scansweepHelper.verifytime(scanbase.get_jobtypes(scansweepHelper.session))):
        failout = True
    if failout:
        return 0
    scansweepHelper.printconfig()
    if create_mode:
        dsz.ui.Echo('Ran in create mode. Exiting.', dsz.WARNING)
        return
    dsz.lp.RecordToolUse('scansweep', scansweepHelper.toolversion, usage='EXERCISED', comment=' '.join([x.lower() for x in arguments]))
    try:
        scan(scansweepHelper)
    finally:
        dsz.ui.Echo(('=' * 100))
        scansweepHelper.showstats()
        print '\n\n'
        scansweepHelper.generateresults(quiet=False)