Example #1
0
    def _init_passive(self):
        self._init_report()

        print(_("[*] Loading modules:"))
        modules_list = sorted(module_name[4:]
                              for module_name in passive.modules)
        print("\t {0}".format(", ".join(modules_list)))

        # Init output file for report (can be found in the attack() function too)
        if not self.output_file:
            if self.report_generator_type == "html":
                self.output_file = self.COPY_REPORT_DIR
            else:
                filename = "{}_{}".format(
                    self.server.replace(":", "_"),
                    strftime("%m%d%Y_%H%M", self.report_gen.scan_date))
                if self.report_generator_type == "txt":
                    extension = ".txt"
                elif self.report_generator_type == "json":
                    extension = ".json"
                else:
                    extension = ".xml"
                self.output_file = filename + extension

        logger = ConsoleLogger()
        if self.color:
            logger.color = True

        for mod_name in passive.modules:
            passive_module = import_module("wapitiCore.passive." + mod_name)
            instance = getattr(passive_module, mod_name)(self.persister,
                                                         logger)
            self.passive.append(instance)
            instance.log_green(_("[*] Loading passive module {0}"),
                               instance.name)
Example #2
0
    def update(self):
        """Update modules that implement an update method"""
        logger = ConsoleLogger()
        if self.color:
            logger.color = True

        for mod_name in attack.modules:
            mod = import_module("wapitiCore.attack." + mod_name)
            mod_instance = getattr(mod, mod_name)(self.crawler, self.persister, logger, self.attack_options)
            if hasattr(mod_instance, "update"):
                print(_("Updating module {0}").format(mod_name[4:]))
                mod_instance.update()
        print(_("Update done."))
Example #3
0
    def _init_attacks(self):
        self._init_report()

        logger = ConsoleLogger()
        if self.color:
            logger.color = True

        print(_("[*] Loading modules:"))
        modules_list = sorted(module_name[4:]
                              for module_name in attack.modules)
        print("\t {0}".format(", ".join(modules_list)))
        for mod_name in attack.modules:
            try:
                mod = import_module("wapitiCore.attack." + mod_name)
            except ImportError:
                print(_("[!] Could not find module {0}").format(mod_name))
                continue

            mod_instance = getattr(mod, mod_name)(self.crawler, self.persister,
                                                  logger, self.attack_options)
            if hasattr(mod_instance, "set_timeout"):
                mod_instance.set_timeout(self.crawler.timeout)
            self.attacks.append(mod_instance)

            self.attacks.sort(key=attrgetter("PRIORITY"))

        for attack_module in self.attacks:
            attack_module.set_verbose(self.verbose)
            if attack_module.name not in attack.commons:
                attack_module.do_get = False
                attack_module.do_post = False

            if self.color == 1:
                attack_module.set_color()

        # Custom list of modules was specified
        if self.module_options is not None:
            # First deactivate all modules
            for attack_module in self.attacks:
                attack_module.do_get = False
                attack_module.do_post = False

            opts = self.module_options.split(",")

            for module_opt in opts:
                if module_opt.strip() == "":
                    continue

                method = ""
                if module_opt.find(":") > 0:
                    module_name, method = module_opt.split(":", 1)
                else:
                    module_name = module_opt

                # deactivate some module options
                if module_name.startswith("-"):
                    module_name = module_name[1:]
                    if module_name in ("all", "common"):
                        for attack_module in self.attacks:
                            if module_name == "all" or attack_module.name in attack.commons:
                                if not method:
                                    attack_module.do_get = attack_module.do_post = False
                                elif method == "get":
                                    attack_module.do_get = False
                                elif method == "post":
                                    attack_module.do_post = False
                    else:
                        found = False
                        for attack_module in self.attacks:
                            if attack_module.name == module_name:
                                found = True
                                if not method:
                                    attack_module.do_get = attack_module.do_post = False
                                elif method == "get":
                                    attack_module.do_get = False
                                elif method == "post":
                                    attack_module.do_post = False
                        if not found:
                            print(
                                _("[!] Unable to find a module named {0}").
                                format(module_name))

                # activate some module options
                else:
                    if module_name.startswith("+"):
                        module_name = module_name[1:]

                    if module_name in ("all", "common"):
                        for attack_module in self.attacks:
                            if module_name == "all" or attack_module.name in attack.commons:
                                if not method:
                                    attack_module.do_get = attack_module.do_post = True
                                elif method == "get":
                                    attack_module.do_get = True
                                elif method == "post":
                                    attack_module.do_post = True
                    else:
                        found = False
                        for attack_module in self.attacks:
                            if attack_module.name == module_name:
                                found = True
                                if not method:
                                    attack_module.do_get = attack_module.do_post = True
                                elif method == "get":
                                    attack_module.do_get = True
                                elif method == "post":
                                    attack_module.do_post = True
                        if not found:
                            print(
                                _("[!] Unable to find a module named {0}").
                                format(module_name))
Example #4
0
    def __init_attacks(self):
        self.__init_report()

        logger = ConsoleLogger()
        if self.color:
            logger.color = True

        print(_("[*] Loading modules:"))
        print("\t {0}".format(", ".join(attack.modules)))
        for mod_name in attack.modules:
            mod = import_module("wapitiCore.attack." + mod_name)
            # NICO self.report_gen -> self.sqlite_persister
            mod_instance = getattr(mod, mod_name)(self.crawler, self.persister,
                                                  logger, self.attack_options)
            if hasattr(mod_instance, "set_timeout"):
                mod_instance.set_timeout(self.crawler.timeout)
            self.attacks.append(mod_instance)

            self.attacks.sort(key=attrgetter("PRIORITY"))

        for attack_module in self.attacks:
            attack_module.set_verbose(self.verbose)
            if self.color == 1:
                attack_module.set_color()

        # Custom list of modules was specified
        if self.module_options is not None:
            # First deactivate all modules
            for attack_module in self.attacks:
                attack_module.do_get = False
                attack_module.do_post = False

            opts = self.module_options.split(",")

            for opt in opts:
                if opt.strip() == "":
                    continue

                method = ""
                if opt.find(":") > 0:
                    module_name, method = opt.split(":", 1)
                else:
                    module_name = opt

                # deactivate some module options
                if module_name.startswith("-"):
                    module_name = module_name[1:]
                    if module_name == "all":
                        for attack_module in self.attacks:
                            if attack_module.name in attack.commons:
                                if method == "get" or method == "":
                                    attack_module.do_get = False
                                if method == "post" or method == "":
                                    attack_module.do_post = False
                    else:
                        found = False
                        for attack_module in self.attacks:
                            if attack_module.name == module_name:
                                found = True
                                if method == "get" or method == "":
                                    attack_module.do_get = False
                                if method == "post" or method == "":
                                    attack_module.do_post = False
                        if not found:
                            print(
                                _("[!] Unable to find a module named {0}").
                                format(module_name))

                # activate some module options
                else:
                    if module_name.startswith("+"):
                        module_name = module_name[1:]
                    if module_name == "all":
                        print(
                            _("[!] Keyword 'all' was removed for activation. Use 'common' and modules names instead."
                              ))
                    elif module_name == "common":
                        for attack_module in self.attacks:
                            if attack_module.name in attack.commons:
                                if method == "get" or method == "":
                                    attack_module.do_get = True
                                if method == "post" or method == "":
                                    attack_module.do_post = True
                    else:
                        found = False
                        for attack_module in self.attacks:
                            if attack_module.name == module_name:
                                found = True
                                if method == "get" or method == "":
                                    attack_module.do_get = True
                                if method == "post" or method == "":
                                    attack_module.do_post = True
                        if not found:
                            print(
                                _("[!] Unable to find a module named {0}").
                                format(module_name))