本文相關程序 T-DNS 支持對局域網內任意主機發起DNS ID欺騙攻擊,使其所訪問的任何網站均被指向一個您自定義的WEB服務器,如您自己的個人主頁。 域名系統(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
PacketSendPacket(lpadapter,lppackets,TRUE); //發送ARP欺騙的響應數據報;
3.getmac()函數 GetAdaptersInfo(padapterinfo,&adapterinfosize); //獲取網絡適配器的屬性; SendARP(destip,0,pulmac,&ullen); //發送ARP請求數據報,過去網絡主機的MAC地址;
4.main()函數 PacketGetAdapterNames((char *)adaptername,&adapterlength); //獲得本地主機的網絡適配器列表和描述; lpadapter=PacketOpenAdapter(adapterlist[open-1]);
//打開指定的網絡適配器; CreateThread(NULL,0,sniff,NULL,0,&threadrid); CreateThread(NULL,0,arpspoof,NULL,0,&threadsid); //創建兩個線程; WaitForMultipleObjects(2,thread,FALSE,INFINITE); //等待其中的某個線程結束;四> 小結與後記 局域網內的網絡安全是一個值得大家關注的問題,往往容易發起各種欺騙攻擊,這是局域網自身的屬性所決定的--網絡共享。本文所講解的DNS ID欺騙是基於ARP欺騙之上的網絡攻擊,如果在廣域網上,則比較麻煩。不過也有一些例外情況:如果IE中使用代理服務器,欺騙不能進行,因為這時客戶端並不會在本地進行域名請求;如果你訪問的不是網站主頁,而是相關子目錄的文件,這樣你在自定義的網站上不會找到相關的文件,登陸以失敗告終。如果你不幸被欺騙了,先禁用本地連接,然後啟用本地連接就可以清除DNS緩存。