Beispiel #1
0
def dotransform(request, response):
    nameserver = request.value

    if nslookup_raw("www.google.ca", resolver=nameserver).answer:
        for site in config["dnscachesnoop/wordlist"]:
            debug("Resolving %s" % site)

            msg = nslookup_raw(site, resolver=nameserver, recursive=False)
            if not msg.answer:
                msg = nslookup_raw("www.%s" % site, resolver=nameserver, recursive=False)
            if msg.answer:
                e = DNSName(site)
                t = Table(["Name", "Query Class", "Query Type", "Data", "TTL"], "Cached Answers")
                for rrset in msg.answer:
                    for rr in rrset:
                        t.addrow(
                            [
                                rrset.name.to_text(),
                                dns.rdataclass.to_text(rr.rdclass),
                                dns.rdatatype.to_text(rr.rdtype),
                                rr.to_text(),
                                rrset.ttl,
                            ]
                        )
                e += Label("Cached Answers from %s" % nameserver, t, type="text/html")
                response += e
    else:
        response += UIMessage("DNS server did not respond to initial DNS request.")
    return response
Beispiel #2
0
def dotransform(request, response):
    nameserver = request.value

    if nslookup_raw('www.google.ca', resolver=nameserver).answer:
        for site in config['dnscachesnoop/wordlist']:
            debug('Resolving %s' % site)

            msg = nslookup_raw(site, resolver=nameserver, recursive=False)
            if not msg.answer:
                msg = nslookup_raw('www.%s' % site,
                                   resolver=nameserver,
                                   recursive=False)
            if msg.answer:
                e = DNSName(site)
                t = Table(['Name', 'Query Class', 'Query Type', 'Data', 'TTL'],
                          'Cached Answers')
                for rrset in msg.answer:
                    for rr in rrset:
                        t.addrow([
                            rrset.name.to_text(),
                            dns.rdataclass.to_text(rr.rdclass),
                            dns.rdatatype.to_text(rr.rdtype),
                            rr.to_text(), rrset.ttl
                        ])
                e += Label('Cached Answers from %s' % nameserver,
                           t,
                           type='text/html')
                response += e
    else:
        response += UIMessage(
            'DNS server did not respond to initial DNS request.')
    return response
def dotransform(request, response):

    domain = request.value
    wildcard_ips = set()
    found_subdomains = {}

    try:
        msg = nslookup_raw('%s.%s' % (str(uuid4()), domain))
        if msg.answer:
            wildcard_ips = get_ip_addresses(msg)
            name = '*.%s' % domain
            response += DNSName(name)
            found_subdomains[name] = 1
    except dns.exception.Timeout:
        pass

    if wildcard_ips:
        warning = 'Warning: wildcard domain is defined... results may not be accurate'
        debug(warning)
        response += UIMessage(warning)

    ncount = 0
    nthreads = config['dnsdiscovery/numthreads']
    subdomains = set(config['dnsdiscovery/wordlist'])

    threads = []
    queue_send = Queue()
    queue_recv = Queue()
    for i in range(0, nthreads):
        t = DNSResolver(request.value, queue_send, queue_recv)
        t.start()
        threads.append(t)

    for s in subdomains:
        queue_send.put(s)

    for i in range(0, nthreads):
        queue_send.put(None)

    while True:
        msg = queue_recv.get()
        if not msg:
            ncount += 1
            if ncount == nthreads:
                break
        elif msg.answer:
            ips = get_ip_addresses(msg)
            if wildcard_ips and wildcard_ips.issuperset(ips):
                continue
            for name in get_names(domain, msg):
                if name in found_subdomains:
                    continue
                else:
                    found_subdomains[name] = 1
                    response += DNSName(name)

    for t in threads:
        t.join()
    return response
Beispiel #4
0
def dotransform(request, response):

    domain = request.value
    wildcard_ips = set()
    found_subdomains = {}

    try:
        msg = nslookup_raw('%s.%s' % (str(uuid4()), domain))
        if msg.answer:
            wildcard_ips = get_ip_addresses(msg)
            name = '*.%s' % domain
            response += DNSName(name)
            found_subdomains[name] = 1
    except dns.exception.Timeout:
        pass

    if wildcard_ips:
        warning = 'Warning: wildcard domain is defined... results may not be accurate'
        debug(warning)
        response += UIMessage(warning)

    ncount = 0
    nthreads = config['dnsdiscovery/numthreads']
    subdomains = set(config['dnsdiscovery/wordlist'])

    threads = []
    queue_send = Queue()
    queue_recv = Queue()
    for i in range(0, nthreads):
        t = DNSResolver(request.value, queue_send, queue_recv)
        t.start()
        threads.append(t)

    for s in subdomains:
        queue_send.put(s)

    for i in range(0, nthreads):
        queue_send.put(None)

    while True:
        msg = queue_recv.get()
        if not msg:
            ncount += 1
            if ncount == nthreads:
                break
        elif msg.answer:
            ips = get_ip_addresses(msg)
            if wildcard_ips and wildcard_ips.issuperset(ips):
                continue
            for name in get_names(domain, msg):
                if name in found_subdomains:
                    continue
                else:
                    found_subdomains[name] = 1
                    response += DNSName(name)

    for t in threads:
        t.join()
    return response
 def run(self):
     while True:
         subdomain = self.queue_recv.get()
         if not subdomain:
             break
         name = '%s.%s' % (subdomain, self.domain)
         name = re.sub('\.+', '.', name)
         # debug('Resolving name: %s' % name)
         try:
             msg = nslookup_raw(name)
             if msg.answer:
                 self.queue_send.put(msg)
         except dns.exception.Timeout:
             debug('Request timed out for name: %s' % name)
             pass
         sleep(1 / self.lookup_rate)
     self.queue_send.put(None)
Beispiel #6
0
 def run(self):
     while True:
         subdomain = self.queue_recv.get()
         if not subdomain:
             break
         name = '%s.%s' % (subdomain, self.domain)
         name = re.sub('\.+', '.', name)
         # debug('Resolving name: %s' % name)
         try:
             msg = nslookup_raw(name)
             if msg.answer:
                 self.queue_send.put(msg)
         except dns.exception.Timeout:
             debug('Request timed out for name: %s' % name)
             pass
         sleep(1 / self.lookup_rate)
     self.queue_send.put(None)