实验是基于Linux系统,配置了bind9服务的机器缓存
首先三台虚拟机分别给它们分配ip,如图,User为192.168.0.100,DNS Server为192.168.0.10,Attacker为192.168.0.200,对三台机器的代称为图中所示,下同。服务器
DNS Server的配置:网络
User的配置:.net
三台机器的外部网关设置为VMware的NAT模式的虚拟网卡默认分配的网关,我这里是192.168.139.23d
DNS Server设置后的网络配置:(其它相似)blog
这里主要就是修改User本地的Host文件,增长www.example.com一项,定向为127.0.0.1dns
如图,成功ping www.example.com获得本身设置的1.2.3.4的DNS解析ip地址ip
当User向DNS Server发送DNS查询的时候,Attacker监听了这个DNS查询请求,而后在DNS Server回复正确的DNS Response以前,先回复一个伪造欺骗的DNS Response给User,从而达到了DNS欺骗的效果。rem
实验中咱们借用了Netwox/Netwag tool 105来进行DNS欺骗,具体的设置以下虚拟机
获得的实验效果为
当DNS Server对Root DNS Server询问的时候,Attacker监听了DNS Server对外发出的DNS Query,伪造了一个DNS Response给DNS Server,从而让DNS Server中有了DNS Cache,且设置的ttl很长,所以就可以达到高效的DNS Attack。
实验中咱们借用了Netwox/Netwag tool 105来进行DNS欺骗,具体的设置以下
获得的实验结果为
DNS Server中的DNS Cache:
User中使用Dig命令获得的结果:
正常状况下的DNS查询是这样子的
可是咱们能够将它简化成下面这样
因为不在同一局域网内,Attacker不能监听DNS Server的DNS Query包,因此采用的方法是对transaction ID进行全枚举,并且必须在真正的DNS Response到来以前枚举成功这个transaction ID,为了简化实验,咱们将UDP port设置为33333,因此就不用枚举UDP port这个变量。
可是ns.dnslabattacker.net不是一个合法的域名,所以DNS Server须要对它进行验证,不然不会将它保存在DNS Cache中,因此须要在Attacker机器中配置DNS服务,将ns.dnslabattacker.net做为该DNS的本地zone就好。
查看一下实验结果:
首先是Attacker对DNS发DNS Query和DNS Respose包:
而后在DNS Server中用Wireshark查看收到的包:
查看一下DNS Server中的Cache:
在User中Dig一下aaaaa.example.edu