本文僅用於研究目的!與此相關所產生的一切作者概不負責!
【摘要】
DNS欺騙可以用來上BBS隱藏ip,但其作用遠遠不止這些。
【簡述】
熟悉網絡的人都知道,當客戶向一台服務器請求服務時,服務器方一般會
根據客戶的ip反向解析出該ip對應的域名。這種反向域名解析就是一個查DNS
(Domain Name Service)的過程。
如果客戶的ip對應有域名,那麼DNS查詢會返回其域名。服務器端得到這
一機器名後會將其記錄下來並傳遞給應用程序,於是我們可以看到有人上bbs
來自argo.zsu.edu.cn,其實她來自202.116.64.6——“逸 仙 時 空” BBS。
細心的人會發現BBS上顯示ip的欄是有長度局限的,因此若客戶機的域名足夠
長便可隱藏住自己機器名,如parallelcomput其實是parallelcomputing.xx.
xxx.xxx.xx。這便是隱藏ip的方法之一,此法要和網管比較熟或者咱自己就
是DNS網管。;)
但是您和網管熟嗎?反正偶不熟。:(
讓我們換個思路:如果服務器在進行DNS查詢時能夠人為地給它我們自己
的應答信息結果會怎樣呢?答案顯然不用我說了,這就是著名的DNS欺騙(dns
spoofing)。說實話,DNS欺騙威力巨大,把它用來在BBS上隱藏ip實在是殺
雞用牛刀。:)
【詳述】
現有的大多數DNS服務實現存在兩個比較“好”的性質。
其一為當DNS服務器收到一合法的DNS應答信息時它會接受這一返回包中的
所有信息,並存入CACHE。舉一個例子:在10.10.1.2的用戶要TELNET到100.100
.100.100上,100.100.100.100使用的DNS為100.100.100.200。三次握手後100.
100.100.100會向100.100.100.200發一PTR類型的DNS查詢(由IP查主機名):
100.100.100.100 -> 100.100.100.200 [Query]
NQY: 1 NAN: 0 NNS: 0 NAD: 0
QY: 2.1.10.10.in-addr.arpa PTR
而100.100.100.200並沒有關於用戶IP對應域的信息。它首先根據DNS協議
極其配置查找出10.10.1.2的授權DNS服務器——10.10.1.5。然後向其發出查
詢包:
100.100.100.200 -> 10.10.1.5 [Query]
NQY: 1 NAN: 0 NNS: 0 NAD: 0
QY: 2.1.10.10.in-addr.arpa PTR
這裡隱蔽了iterative與recursive兩種方式的區別,一般的DNS設置為
iterative,recursive為可選。詳見rfc1034。
10.10.1.5收到該查詢信息後便可返回10.10.1.2對應的域名:
10.10.1.5 -> 100.100.100.200 [Answer]
NQY: 1 NAN: 2 NNS: 1 NAD: 1
QY: 2.1.10.10.in-addr.arpa PTR
AN: 2.1.10.10.in-addr.arpa PTR client.host.com
AN: client.host.com A 10.10.1.2
NS: 1.10.10.in-addr.arpa NS ns.host.com
AD: ns.host.com A 10.10.1.5
返回的包中給出了10.10.1.2對應的域名為client.host.com,並指出
client.host.com對應的IP為10.10.1.2(請注意這兩個對應的是不同的概念!)
。如果這個返回包能由我們給出,豈不是爽呆了!
那麼怎麼做呢?可以控制住你的DNS,然後你想設成什麼就是什麼。但是
太暴力了,偶不推薦這種方式:)。還有更溫和的方法——如果局域網內有DNS
服務器,那麼可以通過監聽、響應的方法實現DNS欺騙。
即先sniff傳到局域網來的DNS查詢包,然後代替本網段的DNS服務器給出
應答信息(羅嗦了這麼多,這裡最重要,呵呵)。
但是本網段的DNS服務器也會同時給出應答信息,這樣我們構造的包與它
的包會有沖突,通常是我們的慢:(這樣的DNS欺騙是不成功的。
為了獲得穩定的DNS欺騙的效果,這就涉及到第二個DNS實現的“好”的
性質:
當DNS服務器發查詢包時,它在包內有一query id,應答信息只有query
id及ip都對上時才能為服務器所接受。而這一id每次加一,所以可以通過第
一次向要欺騙的DNS SERVER發一個查詢並監聽到該id值,隨後再發一查詢,緊
接著馬上send我們構造好的應答包,包內的query id為預測的query id值(可
以指定一個范圍,比如從previous_id+1到previous_id+100)。
接上例,如10.10.1.2的用戶要欺騙100.100.100.100,他可以對100.100.
100.200進行欺騙:
11.11.11.11 -> 100.100.100.200 [Query]
NQY: 1 NAN: 0 NNS: 0 NAD: 0
QY: 12345.host.com A
由於host.com的域名由10.10.1.5控制,100.100.100.200向10.10.1.5發
查詢包:
100.100.100.200 -> 10.10.1.5 [Query]
NQY: 1 NAN: 0 NNS: 0 NAD: 0 QID: 2345
QY: 12345.host.com A
10.10.1.2的用戶可以監聽到給包,得到QID: 2345。然後再向100.100.
100.200發第二次查詢:
11.11.11.11 -> 100.100.100.200 [Query]
NQY: 1 NAN: 0 NNS: 0 NAD: 0
QY: 67890.host.com A
緊接著發帶預測QID的應答包:
10.10.1.5 -> 100.100.100.200 [Answer]
NQY: 1 NAN: 0 NNS: 0 NAD: 0 QID: 2346
QY: 2.1.10.10.in-addr.arpa PTR
AN: 2.1.10.10.in-addr.arpa PTR you.want.name
you.want.name就是用戶自己指定的域名。注意發這個包時應該用10.10.
1.5這一IP地址。
大功告成!##$##^
【後記】
如果您對DNS不熟甚至根本不知其為何物那麼請您先參考有關DNS的文檔,
我建議有時間讀一讀rfc1304、rfc1305。
懇請您不要用它來對國內一些脆弱站點進行惡意攻擊。作者使用的源碼暫
不公開。如果著急可以去ROOTSHELL下載snoof;)。
http://www.rootshell.com/archive-j457nxiqi3gq59dv/199902/snoof.tgz.html
——摘自:http://www.linuxaid.com.cn