dns劫持分析

  最近在作dns解析,關注的重點在查詢域名ns記錄上,異常日誌中捕獲到一個域名,dig查詢:linux

  

  查詢請求類型爲ns,dig結果卻只有一條A記錄。出於好奇,查詢類型改成a類型:git

  

  

  

  這個域名dig 查詢A記錄,返回一條結果,可是每次dig下去結果都不大同樣。回到最開始的問題,請求類型爲NSgithub

dig下去發現沒有ns結果,那麼是不是域名沒有設置ns呢?咱們用whois查看下:工具

  

  能夠看到ns是有的,但是dig的結果爲什麼顯示沒有ns記錄呢?咱們修改下上上節的程序代碼(完整代碼在github見文末),構造一個dns解析請求,請求類型爲ns,程序分析響應的內容,spa

發現其結果和咱們用dig命令查詢是同樣的,返回結果分析後只有一條A記錄:3d

  

  查一下這個地址,結果以下:日誌

  

  很明顯,這個結果是不正確的。server

  咱們模擬了dig工具的dns解析過程,發現只能獲取到域名的A記錄,爲了搞清楚到底發生了什麼,咱們用抓包工具來幫助咱們瞭解起因。首先打開抓包工具,blog

而後運行程序,發一個dns查詢包,在wireshark中過濾類型,查看結果:dns

  

  第一個是咱們發起的查詢,能夠看到類型是NS,請求的域名是3331.com,返回的響應結果有三個,對於linuxdig命令來講,它只處理最早到達的響應包,也就是第一個,看看第一個包中都有什麼內容:

  

  請求類型nsanswers中確只有type A,並告訴咱們A記錄是243.185.187.39。這就是咱們所說的dns劫持的一種,可是,查看第三個響應包:

  

  

能夠看到,ns記錄和咱們用whois查詢的結果是同樣的。這就是說,查詢過程是沒有被打斷的,被問詢的server有響應咱們的解析請求,只不過在這個過程當中,劫持者截獲了請求,並僞造了多個響應包發回來。

  對於這種狀況,我所使用的方法是檢測每個返回的響應包,判斷是否有我指望的結果,若是沒有,則丟棄這個包,不然就解析這個響應包,同時設置read超時時間,超過設定時間則認爲沒有後續的響

應包了。有興趣的能夠移步github查看代碼:https://github.com/taoge2520/test_for_dig

相關文章
相關標籤/搜索