滲透&&探測 (之DNS協議)

不開飛機的舒克發表於2018-10-09

  DNS 是網際網路 核心協議之一。不管是 上網瀏覽,還是 程式設計開發,都需要了解一點它的知識。

DNS是什麼

  DNSDomain Name System 的縮寫)的作用非常簡單,就是根據 域名 查出IP地址。你可以把它想象成一本 巨大的電話本

  舉例來說,如果你要訪問域名www.baidu.com,首先要通過DNS查出它的IP地址是220.181.57.216123.125.115.110

查詢過程

  雖然 只需要返回一個IP地址,但是DNS的查詢過程非常複雜,分成 多個步驟

  工具軟體dig可以顯示 整個查詢過程

$ dig www.baidu.com
複製程式碼

  上面的命令會輸出 六段 資訊。

  • 第一段是查詢引數和統計

    1

  • 第二段是查詢內容

    2

  上面結果表示,查詢域名www.baidu.comA記錄,Aaddress的縮寫。

  • 第三段是DNS伺服器的答覆
    3

  上面結果顯示,www.baidu.com三個A記錄,即 三個IP地址294TTL值(Time to live 的縮寫),表示 快取時間,即 600 秒之內 不用重新查詢

  • 第四段顯示www.baidu.comNS記錄(Name Server的縮寫),即 哪些伺服器 負責管理www.baidu.comDNS記錄。
    4

  上面結果顯示www.baidu.com共有五條NS記錄,即 五個域名伺服器,向其中任一臺查詢就能知道www.baidu.comIP地址是什麼。

  • 第五段是上面四個域名伺服器的IP地址

    5

  • 第六段是DNS伺服器的一些傳輸資訊。

    6

  上面結果顯示,本機的DNS伺服器是192.168.3.1,查詢埠是53DNS伺服器的預設埠),以及迴應長度是271位元組。

如果不想看到這麼多內容,可以使用+short引數。

$ dig +short www.baidu.com
www.a.shifen.com.
115.239.211.112
115.239.210.27
複製程式碼

  上面命令只返回www.baidu.com對應的 2IP地址(即A記錄)和一個CNAME(Canonical Name,後文有介紹)。

DNS伺服器

  下面我們根據前面這個例子,一步步還原,本機到底怎麼得到域名www.baidu.comIP地址。

  首先,本機一定要知道DNS伺服器的IP地址,否則上不了網。通過DNS伺服器,才能知道某個域名的IP地址到底是什麼。

dns

  DNS 伺服器的IP地址,有可能是 動態的,每次上網時由 閘道器分配,這叫做DHCP機制;也有可能是事先指定的 固定地址MacOS系統裡面,DNS伺服器的IP地址儲存在/etc/resolv.conf檔案。

  上例的DNS伺服器是192.168.3.1,這是一個內網地址。有一些 公網DNS伺服器,也可以使用,其中最有名的就是Google8.8.8.8Level 34.2.2.2

  本機只向自己的DNS伺服器查詢,dig命令有一個@引數,顯示向其他DNS伺服器查詢的結果。

$ dig @8.8.8.8 www.baidu.com
複製程式碼

  上面命令指定向DNS伺服器8.8.8.8查詢。

域名的層級

  DNS 伺服器怎麼會知道每個域名的IP地址呢?答案是分級查詢。

  請仔細看前面的例子,每個域名的尾部都多了一個點。

3

  比如,域名www.baidu.com顯示為www.baidu.com.。這不是 疏忽,而是 所有域名的尾部,實際上都有一個 根域名

  舉例來說,www.example.com真正的域名是www.example.com.root,簡寫為www.example.com.

  因為,根域名.root對於 所有域名 都是一樣的,所以平時是 省略的

  根域名的 下一級,叫做 頂級域名top-level domain,縮寫為TLD),比如.com.net

  再下一級叫做 次級域名second-level domain,縮寫為SLD),比如www.example.com裡面的.example,這一級域名是使用者可以 註冊的

  再下一級是主機名(host),比如www.example.com裡面的www,又稱為 三級域名,這是使用者在自己的域裡面為伺服器分配的名稱,是使用者可以 任意分配的

  總結一下,域名的層級結構如下。

主機名.次級域名.頂級域名.根域名

# 即

host.sld.tld.root
複製程式碼

DNS的記錄型別

  域名IP之間的對應關係,稱為 記錄record)。根據使用場景,記錄 可以分成不同的 型別type),前面已經看到了有 A記錄

  常見的DNS記錄型別如下:

  1. A:地址記錄(Address),返回域名指向的IP地址

  2. NS:域名伺服器記錄(Name Server),返回儲存 下一級域名資訊的伺服器地址。該記錄只能設定為 域名,不能設定為IP地址。

  3. MX:郵件記錄(Mail eXchange),返回接收電子郵件的伺服器地址。

  4. CNAME:規範名稱記錄(Canonical Name),返回另一個域名,即當前查詢的域名是另一個域名的跳轉,詳見下文。

  5. PTR:逆向查詢記錄(Pointer Record),只用於從IP地址查詢域名

  一般來說,為了服務的安全可靠,至少應該有 兩條NS記錄,而A記錄和MX記錄也可以有多條,這樣就提供了服務的 冗餘性防止出現單點失敗

  CNAME 記錄主要用於域名的內部跳轉,為伺服器配置提供靈活性,使用者感知不到。舉例來說,www.baidu.com這個域名就是一個CNAME記錄。

$ dig www.baidu.com

...

;; ANSWER SECTION:
www.baidu.com.		1091	IN	CNAME	www.a.shifen.com.
www.a.shifen.com.	200	IN	A	115.239.211.112
www.a.shifen.com.	200	IN	A	115.239.210.27
複製程式碼

  上面結果顯示,www.baidu.comCNAME記錄指向www.a.shifen.com。也就是說,使用者查詢www.baidu.com的時候,實際上返回的是www.a.shifen.comIP地址。

  這樣的 好處 是,變更伺服器IP地址的時候,只要修改www.a.shifen.com這個域名就可以了,使用者的www.baidu.com域名不用修改。

  由於CNAME記錄就是一個替換,所以 域名 一旦設定CNAME記錄以後,就不能再設定其他記錄了(比如A記錄和MX記錄),這是為了 防止產生衝突。舉例來說,foo.com指向bar.com,而兩個域名各有自己的MX記錄,如果兩者不一致,就會 產生問題。由於頂級域名通常要設定MX記錄,所以一般 不允許使用者對頂級域名 設定CNAME記錄。

  PTR 記錄用於從IP地址反查域名。dig命令的-x引數用於查詢PTR記錄。

$ dig -x 192.30.252.153

...

;; ANSWER SECTION:
153.252.30.192.in-addr.arpa. 3600 IN PTR pages.github.com.
複製程式碼

  上面結果顯示,192.30.252.153這臺伺服器的域名是pages.github.com

  逆向查詢 的一個應用,是可以 防止垃圾郵件,即 驗證傳送郵件IP地址,是否真的有它所聲稱的域名。

  dig 命令可以檢視指定的 記錄型別

$ dig a github.com
$ dig ns github.com
$ dig mx github.com
複製程式碼

其他DNS工具

  除了dig,還有一些 其他小工具 也可以使用。

  1. host 命令

  host 命令可以看作dig命令的簡化版本,返回當前請求域名的各種記錄。

$ host baidu.com
baidu.com has address 123.125.115.110
baidu.com has address 220.181.57.216
baidu.com mail is handled by 20 mx1.baidu.com.
baidu.com mail is handled by 20 jpmx.baidu.com.
baidu.com mail is handled by 20 mx50.baidu.com.
baidu.com mail is handled by 10 mx.maillb.baidu.com.
baidu.com mail is handled by 15 mx.n.shifen.com.
複製程式碼

  host 命令也可以用於 逆向查詢,即從IP地址查詢域名,等同於dig -x <ip>

$ host 192.30.252.153

153.252.30.192.in-addr.arpa domain name pointer pages.github.com.
複製程式碼
  1. nslookup 命令

  nslookup 命令用於 互動式地查詢域名記錄

$ nslookup

> www.baidu.com
Server:		192.168.3.1
Address:	192.168.3.1#53

Non-authoritative answer:
www.baidu.com	canonical name = www.a.shifen.com.
Name:	www.a.shifen.com
Address: 115.239.211.112
Name:	www.a.shifen.com
Address: 115.239.210.27
複製程式碼
  1. whois 命令

  whois 命令用來檢視 域名的註冊情況

$ whois baidu.com
複製程式碼

相關文章