實驗是基於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