Windows下DNS ID欺騙的原理與實現

來源:互聯網
上載者:User

網域名稱系統(DNS)是一種用於TCP/IP應用程式的分散式資料庫,它提供主機名稱字和IP地址之間的轉換資訊。通常,網路使用者通過UDP協議和DNS伺服器進行通訊,而伺服器在特定的53 連接埠監聽,並返回使用者所需的相關資訊。

一.DNS協議的相關資料結構

DNS資料報:

typedef struct dns
{
  unsigned short id;
  //標識,通過它用戶端可以將DNS的請求與應答相匹配;
  unsigned short flags;
  //標誌:[QR | opcode | AA| TC| RD| RA | zero | rcode ]
  unsigned short quests;
  //問題數目;
  unsigned short answers;
  //資源記錄數目;
  unsigned short author;
  //授權資源記錄數目;
  unsigned short addition;
  //額外資源記錄數目;
}DNS,*PDNS;

在16位的標誌中:QR位判斷是查詢/響應報文,opcode區別查詢類型,AA判斷是否為授權回答,TC判斷是否可截斷,RD判斷是否期望遞迴查詢,RA判斷是否為可用遞迴,zero必須為0,rcode為返回碼欄位。

DNS查詢資料報:

typedef struct query
{
  unsinged char *name;
  //查詢的網域名稱,這是一個大小在0到63之間的字串;
  unsigned short type;
  //查詢類型,大約有20個不同的類型
  unsigned short classes;
  //查詢類,通常是A類既查詢IP地址。
}QUERY,*PQUERY;

DNS響應資料報:
typedef struct response
{
  unsigned short name;
  //查詢的網域名稱
  unsigned short type;
  //查詢類型
  unsigned short classes;
  //類型碼
  unsigned int  ttl;
  //存留時間
  unsigned short length;
  //資源資料長度
  unsigned int  addr;
  //資源資料
}RESPONSE,*PRESPONSE;

二.Windows下DNS ID欺騙的原理

我們可以看到,在DNS資料前序部的id(標識)是用來匹配響應和請求資料報的。現在,讓我們來看看網域名稱解析的整個過程。用戶端首先以特定的標識向DNS伺服器發送網域名稱查詢資料報,在DNS伺服器查詢之後以相同的ID號給用戶端發送網域名稱響應資料報。這時用戶端會將收到的DNS響應資料報的ID和自己發送的查詢資料報ID相比較,如果匹配則表明接收到的正是自己等待的資料報,如果不匹配則丟棄之。

假如我們能夠偽裝DNS伺服器提前向用戶端發送響應資料報,那麼用戶端的DNS緩衝裡網域名稱所對應的IP就是我們自訂的IP了,同時用戶端也就被帶到了我們希望的網站。條件只有一個,那就是我們發送的ID匹配的DSN響應資料報在DNS伺服器發送的響應資料報之前到達用戶端。下圖清楚的展現了DNS ID欺騙的過程:

Client <--response--| . . . . . .. . . . . . . . . . DNS Server
           |<--[a.b.c == 112.112.112.112]-- Your Computer

到此,我想大家都知道了DNS ID欺騙的實質了,那麼如何才能實現呢?這要分兩種情況:

1. 本地主機與DNS伺服器,本地主機與用戶端主機均不在同一個區域網路內,方法有以下幾種:向用戶端主機隨機發送大量DNS響應資料報,命中率很低;向DNS伺服器發起拒絕服務的攻擊,太粗魯;BIND漏洞,使用範圍比較窄。

2. 本地主機至少與DNS伺服器或用戶端主機中的某一台處在同一個區域網路內:我們可以通過ARP欺騙來實現可靠而穩定的DNS ID欺騙,下面我們將詳細討論這種情況。
  首先我們進行DNS ID欺騙的基礎是ARP欺騙,也就是在區域網路內同時欺騙網關和用戶端主機(也可能是欺騙網關和DNS伺服器,或欺騙DNS伺服器和用戶端主機)。我們以用戶端的名義向網關發送ARP響應資料報,不過其中將源MAC地址改為我們自己主機的MAC地址;同時以網關的名義向用戶端主機發送ARP響應資料報,同樣將源MAC地址改為我們自己主機的MAC地址。這樣以來,網關看來用戶端的MAC地址就是我們主機的MAC地址;用戶端也認為網關的MAC地址為我們主機的MAC地址。由於在區域網路內資料報的傳送是建立在MAC地址之上了,所以網關和用戶端之間的資料流通必須先通過本地主機。

在監視網關和用戶端主機之間的資料報時,如果發現了用戶端發送的DNS查詢資料報(目的連接埠為53),那麼我們可以提前將自己構造的DNS響應資料報發送到用戶端。注意,我們必須提取有用戶端發送來的DNS查詢資料報的ID資訊,因為用戶端是通過它來進行匹配認證的,這就是一個我們可以利用的DNS漏洞。這樣用戶端會先收到我們發送的DNS響應資料報並訪問我們自訂的網站,雖然用戶端也會收到DNS伺服器的響應報文,不過已經來不及了,哈哈。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.