Exemplo n.º 1
0
    def _parse_payload(self, optsd):
        selected_dic = []
        if "-z" in optsd:
            for i in optsd["-z"]:
                vals = i.split(",")
                t, par = vals[:2]
                p = Facade().get_payload(t)(par)

                l = []
                if len(vals) == 3:
                    encoding = vals[2]
                    for i in encoding.split("-"):
                        if i.find('@') > 0:
                            l.append(
                                plugins.encoders.pencoder_multiple([
                                    Facade().get_encoder(ii)
                                    for ii in i.split("@")
                                ]).encode)
                        else:
                            l += map(lambda x: x().encode,
                                     Facade().proxy("encoders").get_plugins(i))
                else:
                    l = [Facade().get_encoder('none').encode]

                d = dictionary(p, l)
                selected_dic.append(d)

        # Alias por "-z file,Wordlist"
        if "-w" in optsd:
            for i in optsd["-w"]:
                vals = i.split(",")
                f, = vals[:1]
                p = Facade().get_payload("file")(f)

                l = []
                if len(vals) == 2:
                    encoding = vals[1]
                    for i in encoding.split("-"):
                        if i.find('@') > 0:
                            l.append(
                                plugins.encoders.pencoder_multiple([
                                    Facade().get_encoder(ii)
                                    for ii in i.split("@")
                                ]).encode)
                        else:
                            l += map(lambda x: x().encode,
                                     Facade().proxy("encoders").get_plugins(i))
                else:
                    l = [Facade().get_encoder('none').encode]

                d = dictionary(p, l)
                selected_dic.append(d)

        iterat_tool = plugins.iterations.piterator_void
        if "-m" in optsd:
            iterat_tool = Facade().get_iterator(optsd['-m'][0])
        elif len(selected_dic) > 0:
            iterat_tool = Facade().get_iterator("product")

        return iterat_tool(*selected_dic)
Exemplo n.º 2
0
Arquivo: api.py Projeto: runt18/wfuzz
def search_bing(dork, key=None, raw=False):
    if key is None:
        key = Facade().sett.get('plugins', 'bing_apikey')

    if not key:
        raise FuzzException(
            FuzzException.FATAL,
            "An api Bing key is needed. Please chek wfuzz.ini.")

    # some code taken from http://www.securitybydefault.com/2014/07/search2auditpy-deja-que-bing-haga-el.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+SecurityByDefault+%28Security+By+Default%29
    user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; FDM; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322)'
    creds = (':{0!s}'.format(key)).encode('base64')[:-1]
    auth = 'Basic {0!s}'.format(creds)

    # temporary solution, wf should have a process performing http requests. even plugins might need this.

    try:
        request = urllib2.Request(
            'https://api.datamarket.azure.com/Data.ashx/Bing/Search/Composite?Sources=%27web%27&Query=%27'
            + dork + '%27&$format=json')
        request.add_header('Authorization', auth)
        request.add_header('User-Agent', user_agent)
        requestor = urllib2.build_opener()
        result = requestor.open(request)
    except Exception, e:
        raise FuzzException(
            FuzzException.FATAL,
            "Error when retrieving Bing API results: {0!s}.".format(e.msg))
Exemplo n.º 3
0
    def __init__(self, options):
        self.genReq = options.get("genreq")

        # Get active plugins
        lplugins = None
        if options.get("script_string"):
            lplugins = Facade().get_parsers(options.get("script_string"))

            if not lplugins:
                raise FuzzException(
                    FuzzException.FATAL,
                    "No plugin selected, check the --script name or category introduced."
                )

        recursive = lplugins or options.get("rlevel") > 0
        filtering = options.get('filter_params')['active'] is True

        # Create queues (in reverse order)
        # genReq ---> seed_queue -> http_queue -> [round_robin] -> [plugins_queue] * N -> process_queue -> [routing_queue] -> [filter_queue]---> results_queue
        self.results_queue = MyPriorityQueue()
        self.filter_queue = FilterQ(options.get("filter_params"),
                                    self.results_queue) if filtering else None
        self.routing_queue = RoutingQ(
            None, self.filter_queue
            if filtering else self.results_queue) if recursive else None
        self.process_queue = ProcessorQ(
            options.get("rlevel"), self.genReq.stats,
            self.routing_queue if recursive else
            self.filter_queue if filtering else self.results_queue)
        self.plugins_queue = None
        if lplugins:
            cache = HttpCache()
            self.plugins_queue = RoundRobin([
                JobMan(lplugins, cache, self.process_queue),
                JobMan(lplugins, cache, self.process_queue),
                JobMan(lplugins, cache, self.process_queue)
            ])
        self.http_queue = HttpQueue(
            options, self.plugins_queue if lplugins else self.process_queue)
        self.seed_queue = SeedQ(self.genReq, options.get("sleeper"),
                                self.http_queue)

        # recursion routes
        if recursive:
            self.routing_queue.set_routes({
                "<class 'framework.fuzzer.fuzzobjects.FuzzRequest'>":
                self.seed_queue,
                "framework.plugins.pluginobjects.PluginRequest":
                self.http_queue,
                "framework.fuzzer.fuzzobjects.FuzzResult":
                self.filter_queue if filtering else self.results_queue
            })

        ## initial seed request
        self.seed_queue.put_priority(1, self.genReq)
Exemplo n.º 4
0
    fz = Fuzzer(session_options)

    if session_options.get("interactive"):
        # initialise controller
        try:
            kb = KeyPress()
        except ImportError, e:
            raise FuzzException(
                FuzzException.FATAL,
                "Error importing necessary modules for interactive mode: %s" %
                str(e))
        else:
            mc = Controller(fz, kb)
            kb.start()

    printer = Facade().get_printer(session_options.get("printer_tool"))
    printer.header(fz.genReq.stats)

    for res in fz:
        printer.result(res) if res.is_visible else printer.noresult(res)

    printer.footer(fz.genReq.stats)
except FuzzException, e:
    print "\nFatal exception: %s" % e.msg
    if fz: fz.cancel_job()
except KeyboardInterrupt:
    print "\nFinishing pending requests..."
    if fz: fz.cancel_job()
except NotImplementedError, e:
    print "\nFatal exception: Error importing wfuzz extensions"
finally:
Exemplo n.º 5
0
    for genreq in genreqs:
        # Create fuzzer's engine
        session_options.set("genreq",genreq)
        fz = Fuzzer(session_options)

        if session_options.get("interactive"):
            # initialise controller
            try:
                kb = KeyPress()
            except ImportError, e:
                raise FuzzException(FuzzException.FATAL, "Error importing necessary modules for interactive mode: %s" % str(e))
            else:
                mc = Controller(fz, kb)
                kb.start()

        printer = Facade().get_printer(session_options.get("printer_tool"))
        printer.header(fz.genReq.stats)

        for res in fz:
            printer.result(res) if res.is_visible else printer.noresult(res)

        printer.footer(fz.genReq.stats)
except FuzzException, e:
    print "\nFatal exception: %s" % e.msg
    if fz: fz.cancel_job()
except KeyboardInterrupt:
    print "\nFinishing pending requests..."
    if fz: fz.cancel_job()
except NotImplementedError, e:
    print "\nFatal exception: Error importing wfuzz extensions"
finally:
Exemplo n.º 6
0
Arquivo: api.py Projeto: runt18/wfuzz
    def __init__(self):
        self.black_list = Facade().sett.get('plugins', 'file_bl').split(",")

        if self.has_kbase("discovery.bl"):
            self.black_list = self.get_kbase("discovery.bl")[0].split("-")
Exemplo n.º 7
0
 def show_plugins_help(self, registrant, cols=3, category="$all$"):
     print "\nAvailable %s:\n" % registrant
     table_print(
         map(lambda x: x[cols:],
             Facade().proxy(registrant).get_plugins_ext(category)))
     sys.exit(0)
Exemplo n.º 8
0
    def _parse_options(self, optsd, options):

        if "-p" in optsd:
            proxy = []

            for p in optsd["-p"][0].split('-'):
                vals = p.split(":")

                if len(vals) == 2:
                    proxy.append((vals[0], vals[1], "HTML"))
                elif len(vals) == 3:
                    if vals[2] not in ("SOCKS5", "SOCKS4", "HTML"):
                        raise FuzzException(
                            FuzzException.FATAL,
                            "Bad proxy type specified, correct values are HTML, SOCKS4 or SOCKS5."
                        )
                    proxy.append((vals[0], vals[1], vals[2]))
                else:
                    raise FuzzException(FuzzException.FATAL,
                                        "Bad proxy parameter specified.")

            options.set('proxy_list', proxy)

        if "-R" in optsd:
            options.set("rlevel", int(optsd["-R"][0]))

        options.set("printer_tool", "default")

        if "-v" in optsd:
            options.set("printer_tool", "verbose")

        if "-c" in optsd:
            Facade().proxy("printers").kbase.add("colour", True)

        if "-A" in optsd:
            options.set("printer_tool", "verbose")
            Facade().proxy("printers").kbase.add("colour", True)

            options.set("script_string", "default")

        options.set("scanmode", "-Z" in optsd)

        if "-o" in optsd:
            options.set("printer_tool", optsd['-o'][0])

        if "--script" in optsd:
            options.set(
                "script_string", "default"
                if optsd["--script"][0] == "" else optsd["--script"][0])

        if "--script-args" in optsd:
            vals = optsd["--script-args"][0].split(",")
            for i in vals:
                k, v = i.split("=", 1)
                Facade().proxy("parsers").kbase.add(k, v)

        options.set("interactive", "--interact" in optsd)

        # HTTP options

        if "-s" in optsd:
            options.set("sleeper", float(optsd["-s"][0]))

        if "-t" in optsd:
            options.set("max_concurrent", int(optsd["-t"][0]))