Ejemplo n.º 1
0
    def test_udp_ports(self):
        """ Test only udp ports."""
        tports, uports = ports_as_list('U:1-10')

        self.assertIsNotNone(uports)
        self.assertEqual(len(tports), 0)
        self.assertEqual(len(uports), 10)

        for i in range(1, 10):
            self.assertIn(i, uports)
Ejemplo n.º 2
0
    def test_not_spec_type_ports(self):
        """ Test port list without specific type. """
        tports, uports = ports_as_list('51-60')

        self.assertIsNotNone(tports)
        self.assertEqual(len(uports), 0)
        self.assertEqual(len(tports), 10)

        for i in range(51, 60):
            self.assertIn(i, tports)
Ejemplo n.º 3
0
    def test_tcp_ports(self):
        """ Test only tcp ports."""
        tports, uports = ports_as_list('T:1-10,30,31')

        self.assertIsNotNone(tports)
        self.assertEqual(len(uports), 0)
        self.assertEqual(len(tports), 12)

        for i in range(1, 10):
            self.assertIn(i, tports)

        self.assertIn(30, tports)
        self.assertIn(31, tports)
Ejemplo n.º 4
0
    def test_malformed_port_string(self):
        """ Test different malformed port list. """
        tports, uports = ports_as_list('TU:1-2')

        self.assertIsNone(tports)
        self.assertIsNone(uports)

        tports, uports = ports_as_list('U1-2')
        self.assertIsNone(tports)
        self.assertIsNone(uports)

        tports, uports = ports_as_list('U:1-2t:22')
        self.assertIsNone(tports)
        self.assertIsNone(uports)

        tports, uports = ports_as_list('U1-2,T22')
        self.assertIsNone(tports)
        self.assertIsNone(uports)

        tports, uports = ports_as_list('U:1-2,U:22')
        self.assertIsNone(tports)
        self.assertIsNone(uports)
Ejemplo n.º 5
0
    def test_both_ports_udp_first(self):
        """ Test tcp und udp ports, but udp listed first."""
        tports, uports = ports_as_list('U:20-30, T:1-10')

        self.assertIsNotNone(tports)
        self.assertIsNotNone(uports)

        self.assertEqual(len(tports), 10)
        self.assertEqual(len(uports), 11)

        for i in range(1, 10):
            self.assertIn(i, tports)

        for i in range(20, 30):
            self.assertIn(i, uports)
Ejemplo n.º 6
0
    def test_both_ports(self):
        """ Test tcp und udp ports."""
        tports, uports = ports_as_list('T:1-10, U:1-10')

        self.assertIsNotNone(tports)
        self.assertIsNotNone(uports)

        self.assertEqual(len(tports), 10)
        self.assertEqual(len(uports), 10)

        for i in range(1, 10):
            self.assertIn(i, tports)
            self.assertIn(i, uports)

        self.assertNotIn(0, uports)
Ejemplo n.º 7
0
    def exec_dry_run_scan(self, scan_id, nvti, ospd_params):
        options = self._daemon.scan_collection.get_options(scan_id)
        results_per_host = None
        if "results_per_host" in options:
            results_per_host = options.get("results_per_host")

        if not results_per_host or not isinstance(results_per_host, int):
            logger.debug("Using default value for results_per_host options")
            results_per_host = ospd_params["results_per_host"].get("default")

        # Get the host list
        target = self._daemon.scan_collection.get_host_list(scan_id)
        logger.info("The target list %s", target)
        host_list = target_str_to_list(target)

        # Get the port list
        ports = self._daemon.scan_collection.get_ports(scan_id)
        logger.info("The port list %s", ports)
        tcp, _ = ports_as_list(ports)
        # Get exclude hosts list. It must not be scanned
        exclude_hosts = self._daemon.scan_collection.get_exclude_hosts(scan_id)
        logger.info("The exclude hosts list %s", exclude_hosts)

        self._daemon.set_scan_total_hosts(
            scan_id,
            count_total=len(host_list),
        )
        self._daemon.scan_collection.set_amount_dead_hosts(scan_id,
                                                           total_dead=0)

        # Get list of VTS. Ignore script params
        vts = list(self._daemon.scan_collection.get_vts(scan_id))
        if "vt_groups" in vts:
            vts.remove("vt_groups")
        vthelper = VtHelper(nvti)

        # Run the scan.
        # Scan simulation for each single host.
        # Run the scan against the host, and generates results.
        while host_list:
            # Get a host from the list
            current_host = host_list.pop()

            # Check if the scan was stopped.
            status = self._daemon.get_scan_status(scan_id)
            if status == ScanStatus.STOPPED or status == ScanStatus.FINISHED:
                logger.debug(
                    'Task %s stopped or finished.',
                    scan_id,
                )
                return

            res_list = ResultList()

            res_list.add_scan_log_to_list(
                host=current_host,
                name="HOST_START",
                value=str(int(time.time())),
            )

            # Generate N results per host. Default 10 results
            res_count = 0
            while res_count < results_per_host:
                res_count += 1
                oid = choice(vts)
                port = choice(tcp)
                vt = vthelper.get_single_vt(oid)
                if vt:
                    if vt.get('qod_type'):
                        qod_t = vt.get('qod_type')
                        rqod = nvti.QOD_TYPES[qod_t]
                    elif vt.get('qod'):
                        rqod = vt.get('qod')

                    rname = vt.get('name')
                else:
                    logger.debug("oid %s not found", oid)

                res_type = int(uniform(1, 5))
                # Error
                if res_type == 1:
                    res_list.add_scan_error_to_list(
                        host=current_host,
                        hostname=current_host + ".hostname.net",
                        name=rname,
                        value="error running the script " + oid,
                        port=port,
                        test_id=oid,
                        uri="No location",
                    )
                # Log
                elif res_type == 2:
                    res_list.add_scan_log_to_list(
                        host=current_host,
                        hostname=current_host + ".hostname.net",
                        name=rname,
                        value="Log generate from a dry run scan for the script "
                        + oid,
                        port=port,
                        qod=rqod,
                        test_id=oid,
                        uri="No location",
                    )
                # Alarm
                else:
                    r_severity = vthelper.get_severity_score(vt)
                    res_list.add_scan_alarm_to_list(
                        host=current_host,
                        hostname=current_host + ".hostname.net",
                        name=rname,
                        value="Log generate from a dry run scan for the script "
                        + oid,
                        port=port,
                        test_id=oid,
                        severity=r_severity,
                        qod=rqod,
                        uri="No location",
                    )

            res_list.add_scan_log_to_list(
                host=current_host,
                name="HOST_END",
                value=str(int(time.time())),
            )

            # Add the result to the scan collection
            if len(res_list):
                logger.debug(
                    '%s: Inserting %d results into scan '
                    'scan collection table',
                    scan_id,
                    len(res_list),
                )
                self._daemon.scan_collection.add_result_list(scan_id, res_list)

            # Set the host scan progress as finished
            host_progress = dict()
            host_progress[current_host] = ScanProgress.FINISHED
            self._daemon.set_scan_progress_batch(scan_id,
                                                 host_progress=host_progress)

            # Update the host status, Finished host. So ospd can
            # calculate the scan progress.
            # This is quite importan, since the final scan status depends on
            # the progress calculation.
            finished_host = list()
            finished_host.append(current_host)
            self._daemon.sort_host_finished(scan_id, finished_host)

            time.sleep(1)
        logger.debug('%s: End task', scan_id)
Ejemplo n.º 8
0
    def test_invalid_char_port(self):
        """ Test list with a false char. """
        tports, uports = ports_as_list('R:51-60')

        self.assertIsNone(tports)
        self.assertIsNone(uports)
Ejemplo n.º 9
0
    def test_empty_port(self):
        """ Test an empty port list. """
        tports, uports = ports_as_list('')

        self.assertIsNone(tports)
        self.assertIsNone(uports)