本文主要介紹:
1)什麼是DNS?
2)使用Nslookup命令探測DNS域傳送漏洞
3)使用nmap掃描DNS域傳送漏洞
4)使用dig命令檢測
5)使用python + Dig批量掃描漏洞主機
6)使用python實現AXFR査詢
1)什麼是DNS?
DNS(Domain Name System,功能變數名稱管理系統)是萬維網WWW的重要基礎。它建立在一個分散式資料庫基礎之上,在這個資料庫裏,保存了IP地址和功能變數名稱的相互映射關係。
正因為DNS的存在,我們才不需要記住大量無規則的IP地址, 而只需要知道對方電腦的名稱,就可以訪問對應服務。比如,筆者的部落格是www.lijiejie.com,當用戶在流覽器地址欄輸入上述功能變數名稱,瀏覽器就將向DNS伺服器發送査詢,得到目標主機的IP地址,再與對應的主機建立一個HTTP連接,請求網頁。相對於記住106.187.34.156這個IP地址,功能變數名稱www.lijiejie.com自然更有意義、更加清晰明了。
DNS伺服器使用的TCP/UDP埠號是53。
最常用的DNS記錄有以下幾類:
A記錄 IP地址記錄,記錄一個功能變數名稱對應的IP地址
AAAA記錄 IPv6地址記錄,記錄一個功能變數名稱對應的IPv6地址
CNAME記錄 別名記錄,記錄一個主機的別名
MX記錄 電子郵件交換記錄,記錄一個郵件功能變數名稱對應的IP地址,比如my[at]lijiejie.com
後面的部分lijiejie.com,郵件伺服器對應的IP地址
NS記錄 功能變數名稱服務器記錄,記錄該功能變數名稱由哪臺功能變數名稱服務器解析
PTR記錄 反向記錄,也即從IP地址到功能變數名稱的一條記錄
TXT記錄 記錄功能變數名稱的相關文字資訊
作為重要的互聯網基礎設施,難免成為駭客的重點攻擊目標,服務的穩定性尤為重要。DNS伺服器分為:主服務器、備份服務器和緩存服務器。在主備服務器之間同步資料庫,需要使用“DNS域傳送”。域傳送是指後備服務器從主服務器拷貝數據,並用得到的數據更新自身資料庫。
若DNS伺服器配寘不當,可能導致匿名使用者獲取某個域的所有記錄。造成整個網絡的拓撲結構洩露給潜在的攻擊者,包括一些安全性較低的內部主機,如測試服務器。憑藉這份網絡藍圖,攻擊者可以節省很少的掃描時間。
大的互聯網廠商通常將內部網絡與外部互聯網隔離開,一個重要的手段是使用Private DNS。如果內部DNS洩露,將造成極大的安全風險。風險控制不當甚至造成整個內部網絡淪陷。
2) nslookup命令
筆者首先介紹DNS査詢工具nslookup命令的使用。僅使用該命令,就可完成DNS域傳送的測試。在windows命令提示符中輸入“nslookup ?”,得到如下簡略的用法說明:
d:\nslookup ?
用法:
nslookup [-opt …] # 使用默認服務器的互動模式
nslookup [-opt …] - server # 使用 “server” 的互動模式
nslookup [-opt …] host # 僅查找使用默認服務器的 “host”
nslookup [-opt …] host server # 僅查找使用 “server” 的 “host”
Nslookup命令以兩種方式運行:非互動式和互動式。本文第一次提到“互動式”的概念,簡單說明:互動式系統是指執行過程中允許用戶輸入數據和命令的系統。而非互動式系統,是指一旦開始運行,不需要人干預就可以自行結束的系統。囙此,nslookup以非互動式管道運行,就是指運行後自行結束。而互動式,是指開始運行後,會要求使用者進一步輸入數據和命令。
非互動式下命令的語法是是:
nslookup [-option] [hostname] [server]
Option是可選的參數,不帶參數執行nslookup命令,可進入互動式shell,在shell中輸入help,可查閱參數說明,如下例所示:
D:\>nslookup
默認服務器: public1.114dns.com
Address: 114.114.114.114
> help
命令: (識別字以大寫表示,[]表示可選)
set OPTION -設定選項
type=X -設定査詢類型(如A、AAAA、A+AAAA、ANY、CNAME、MX
NS、PTR、SOA和SRV)
ls [opt] DOMAIN [> FILE] -列出DOMAIN中的地址(可選:輸出到檔案FILE)
-a - 列出規範名稱和別名
-d - 列出所有記錄
-t TYPE - 列出給定RFC記錄類型(例如A、CNAME、MX、NS和PTR等)
的記錄
exit -退出程式
上面是筆者精簡後的輸出,注意兩點:1) 使用type參數可以設定記錄類型。 2) 使用ls命令,可以列出一個域下麵所有的功能變數名稱。
Hostname選項指定需要査詢的主機名,比如www.lijiejie.com。Server選項指定DNS伺服器。為了查詢結果的準確,可選用幾個常用的公共DNS伺服器:8.8.8.8是Google提供的DNS服務,114.114.114.144和114.114.115.115是114DNS提供的免費DNS服務。
下麵的例子通過114.114.114.114査詢功能變數名稱www.lijiejie.com的IP地址:
d:\>nslookup www.lijiejie.com 114.114.114.114
服務器: public1.114dns.com
Address: 114.114.114.114
非權威應答:
名稱: www.lijiejie.com
Address: 106.187.34.156
可以看到,www.lijiejie.com對應的IP主機是106.187.34.156。
下麵的例子査詢jd.com使用的DNS伺服器名稱:
D:\>nslookup -type=ns jd.com
服務器: public1.114dns.com
Address: 114.114.114.114
非權威應答:
jd.com nameserver = ns1.jdcache.com
jd.com nameserver = ns4.jdcache.com
jd.com nameserver = ns1.jd.com
jd.com nameserver = ns2.jd.com
jd.com nameserver = ns3.jd.com
jd.com nameserver = ns2.jdcache.com
jd.com nameserver = ns4.jd.com
jd.com nameserver = ns3.jdcache.com
上述結果顯示,京東商城的外部主DNS伺服器有6個。下麵的例子展示如何査詢taobao.com的郵件交換記錄:
D:\>nslookup -type=mx taobao.com
服務器: public1.114dns.com
Address: 114.114.114.114
非權威應答:
taobao.com MX preference = 10,mail exchanger = mx1.alibaba-inc.com
從上錶可看出,淘寶的郵件交換服務器是mx1.alibaba-inc.com。
下例反向査詢一個IP地址對應的功能變數名稱:
D:\>nslookup -type=ptr 8.8.8.8
服務器: public1.114dns.com
Address: 114.114.114.114
非權威應答:
8.8.8.8.in-addr.arpa name = google-public-dns-a.google.com
可以得到8.8.8.8對應的功能變數名稱是google-public-dns-a.google.com。
筆者繼續介紹在互動式shell中發現一個DNS伺服器的域傳送漏洞的過程:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
D:\>nslookup
默認服務器: public1.114dns.com
Address: 114.114.114.114
> server dns.nwpu.edu.cn
默認服務器: dns.nwpu.edu.cn
Address: 202.117.80.2
> ls nwpu.edu.cn
[dns.nwpu.edu.cn]
nwpu.edu.cn. NS server = dns.nwpu.edu.cn
nwpu.edu.cn. NS server = dns1.nwpu.edu.cn
nwpu.edu.cn. NS server = dns2.nwpu.edu.cn
nwpu.edu.cn. NS server = dns3.nwpu.edu.cn
* A 222.24.192.99
(…省略大量的記錄)
npunecas NS server = webcomp.npunecas.nwpu.edu.cn
webcomp.npunecas A 202.117.85.146
nwpu03 A 202.117.80.4
nwpudb2 A 222.24.210.149
poj A 192.168.0.248
portal A 61.150.43.10
portal1 A 222.24.192.31
portal2 A 222.24.192.32
rei A 202.117.85.10
saip NS server = saipserver.saip.nwpu.edu.cn
saipserver.saip A 202.117.85.72
test A 222.24.192.29
yzb A 202.117.85.3
zsb A 202.117.87.130
zygx A 202.117.80.9
操作基本的步驟是:
1) 輸入nslookup命令進入互動式shell
2) Server 命令參數設定査詢將要使用的DNS伺服器
3) Ls命令列出某個域中的所有功能變數名稱
4) Exit命令退出程式
攻擊者能獲取的敏感主要包括:
1)網絡的拓撲結構,服務器集中的IP地址段
2)資料庫服務器的IP地址,例如上述nwpudb2.nwpu.edu.cn
3)測試服務器的IP地址,例如test.nwpu.edu.cn
4)VPN伺服器地址洩露
5)其他敏感服務器
以上示例了存在漏洞的DNS伺服器,若是不存在漏洞的主機,則可能提示錯誤Query Refused:
D:\>nslookup
默認服務器: public1.114dns.com
Address: 114.114.114.114
> server ns.pku.edu.cn
默認服務器: ns.pku.edu.cn
Address: 202.112.7.13
> ls pku.edu.cn
[ns.pku.edu.cn]
***無法列出域pku.edu.cn: Query refused
DNS伺服器拒絕將區域pku.edu.cn傳送到您的電腦。如果這不正確,
請檢查IP地址202.112.7.13的DNS伺服器上pku.edu.cn的
區域傳送安全設置。
以上是在互動式shell中測試DNS伺服器是否存在域傳送漏洞。為了能够非互動式運行,筆者編寫以下批次檔ls.bat:
echo ls %1 | nslookup – %2
為了測試dns.nwpu.edu.cn服務器,可以執行ls.bat nwpu.edu.cn dns.nwpu.edu.cn。 批次處理中:
1) %1代表第一個參數,也即nwpu.edu.cn
2) %2代表第二個參數,即dns.nwpu.edu.cn
3) Echo是回聲命令,原文輸出傳入的參數內容
4) “|”是筦道符號,作用是把前一個命令執行的結果傳給後一個命令。囙此:執行ls.bat nwpu.edu.cn dns.nwpu.edu.cn,等價於執行echo ls nwpu.edu.cn | nslookup – dns.nwpu.edu.cn。
5) nslookup -dns.nwpu.edu.cn是指定DNS伺服器為dns.nwpu.edu.cn
到此,nslookup命令介紹結束。讀者朋友可反復練習以熟悉它的用法。