日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows下DNS ID欺骗的原理与实现

發布時間:2025/3/15 windows 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows下DNS ID欺骗的原理与实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

域名系統(DNS)是一種用于TCP/IP應用程序的分布式數據庫,它提供主機名字和IP地址之間的轉換信息。通常,網絡用戶通過UDP協議和DNS服務器進行通信,而服務器在特定的53端口監聽,并返回用戶所需的相關信息。

一、DNS協議的相關數據結構

01.DNS數據報:
02.typedef struct?dns
03.{
04.unsigned short id;
05.//標識,通過它客戶端可以將DNS的請求與應答相匹配;
06.unsigned short flags;
07.//標志:[QR | opcode | AA| TC| RD| RA | zero | rcode ]
08.unsigned short quests;
09.//問題數目;
10.unsigned short answers;
11.//資源記錄數目;
12.unsigned short author;
13.//授權資源記錄數目;
14.unsigned short addition;
15.//額外資源記錄數目;
16.}DNS,*PDNS;

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

DNS查詢數據報:

01.typedef struct query
02.{
03.unsinged char??*name;
04.//查詢的域名,這是一個大小在0到63之間的字符串;
05.unsigned short type;
06.//查詢類型,大約有20個不同的類型
07.unsigned short classes;
08.//查詢類,通常是A類既查詢IP地址。
09.}QUERY,*PQUERY;

DNS響應數據報:

01.typedef struct response
02.{
03.unsigned short name;
04.//查詢的域名
05.unsigned short type;
06.//查詢類型
07.unsigned short classes;
08.//類型碼
09.unsigned int? ?ttl;
10.//生存時間
11.unsigned short length;
12.//資源數據長度
13.unsigned int? ?addr;
14.//資源數據
15.}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地址之上了,所以網關和客戶端之間的數據流通必須先通過本地主機。詳細介紹請參見《詳談調用winpcap驅動寫arp多功能工具》。

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

三、核心代碼分析

主程序創建兩個線程,一個線程進行實時的ARP欺騙,另一個線程監聽接收到的數據報,若發現有域名服務查詢數據報,則立即向客戶端發送自定義的DSN響應數據報。測試環境:Windows2000 + VC6.0 + Winpcap_3.0_alpha,注冊表:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersIPEnableRouter = 0×1。

1.sniff線程:

01.PacketSetHwFilter(lpadapter,NDIS_PACKET_TYPE_PROMISCUOUS);
02.//將網卡設置為混雜模式
03.PacketSetBuff(lpadapter,500*1024);
04.//設置網絡適配器的內核緩存;
05.PacketSetReadTimeout(lpadapter,1);
06.//設置等待時間;
07.PacketReceivePacket(lpadapter,lppacketr,TRUE);
08.//接收網絡數據報;
09.checksum((USHORT*)temp,sizeof(PSD)+sizeof(UDPHDR)+sizeof(DNS)+ulen+sizeof(QUERY)+sizeof(RESPONSE));
10.//計算校驗和;
11.PacketInitPacket(lppackets,sendbuf,sizeof(ETHDR)+sizeof(IPHDR)+sizeof(UDPHDR)+sizeof(DNS)+ulen+4+sizeof(RESPONSE));
12.//初始化一個_PACKET結構,發送DNS響應數據報;

2.arpspoof線程;

1.PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));
2.//初始化ARP響應數據報;
3.PacketSendPacket(lpadapter,lppackets,TRUE);
4.//發送ARP欺騙的響應數據報;

3.getmac()函數

1.GetAdaptersInfo(padapterinfo,&adapterinfosize);
2.//獲取網絡適配器的屬性;
3.SendARP(destip,0,pulmac,&ullen);
4.//發送ARP請求數據報,過去網絡主機的MAC地址;

4.main()函數

01.PacketGetAdapterNames((char *)adaptername,&adapterlength);
02.//獲得本地主機的網絡適配器列表和描述;
03.lpadapter=PacketOpenAdapter(adapterlist[open-1]);?
04.//打開指定的網絡適配器;
05.CreateThread(NULL,0,sniff,NULL,0,&threadrid);
06.CreateThread(NULL,0,arpspoof,NULL,0,&threadsid);
07.//創建兩個線程;
08.WaitForMultipleObjects(2,thread,FALSE,INFINITE);
09.//等待其中的某個線程結束;

四、小結與后記

局域網內的網絡安全是一個值得大家關注的問題,往往容易發起各種欺騙攻擊,這是局域網自身的屬性所決定的–網絡共享。本文所講解的DNS ID欺騙是基于ARP欺騙之上的網絡攻擊,如果在廣域網上,則比較麻煩。不過也有一些例外情況:如果IE中使用代理服務器,欺騙不能進行,因為這時客戶端并不會在本地進行域名請求;如果你訪問的不是網站主頁,而是相關子目錄的文件,這樣你在自定義的網站上不會找到相關的文件,登陸以失敗告終。如果你不幸被欺騙了,先禁用本地連接,然后啟用本地連接就可以清除DNS緩存。


源代碼下載頁面:

http://download.csdn.net/detail/swanabin/6560761

轉載于:https://www.cnblogs.com/vcerror/p/4289188.html

總結

以上是生活随笔為你收集整理的Windows下DNS ID欺骗的原理与实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。