4、DNS隧道

FLy_鵬程萬里發表於2018-06-08

0x00 前言

前兩天和朋友說到代理,隨之討論了一下關於隧道技術,之前也發過一篇關於DNS隧道技術的文章,不過感覺沒有寫好,今天就重寫一下關於隧道技術的總結;

首先這篇文章是以前寫的,也發在烏雲過,最近為部落格更新一些隧道技術的東西,所以先把這篇老文章拿出來,後面會更新一些新的東西,也歡迎大家提出新的思路;

0x01 概念

隧道技術(Tunneling)是一種通過使用網際網路絡的基礎設施在網路之間傳遞資料的方式。使用隧道傳遞的資料(或負載)可以是不同協議的資料幀或包。隧道協議將其它協議的資料幀或包重新封裝然後通過隧道傳送。新的幀頭提供路由資訊,以便通過網際網路傳遞被封裝的負載資料。

DNS隧道是通過利用DNS查詢機制特殊性而實現的一種技術,如果我們的請求資料包中的資料,不含過濾規則時,有限制的ISP或者防火牆則不會進行丟包處理。所以,我們在發起請求時,將請求資料包內容通過標準的DNS協議進行加密,標記解析請求的DNS地址,則有限制的ISP在解析客戶端發起的域名請求時,無法識別地址,而去指定的DNS伺服器上進行請求查詢。此時,我們在指定的DNS伺服器上進行資料包解密。再將查詢內容返回,此時,有限制的ISP或者防火牆會再次檢測內容是否為非認證狀態,如果是非認證狀態,則將查詢結果內容進行丟包處理。

0x02 例項分析- DNS隧道技術

環境:客戶機(Kali)192.168.10.135+DNS 伺服器(window2003)192.168.10.132+目標機(redhat7)192.168.10.133

DNS伺服器:192.168.10.132

新建一個名字為”bloodzero.com”的正向解析域

新建一個主機:IP為攻擊者kali的IP


新建一個委託


此時我們的DNS伺服器就配置好了!

Kali:攻擊者&&客戶端 192.168.10.135

攻擊端配置

修改dns2tcpd配置檔案:


resources的IP為目標機的IP


啟動dns隧道的服務端


客戶端配置

刪除ssh連線的known_hosts檔案


修改DNS解析檔案:vim /etc/resolv.conf




配置dns隧道客戶端程式,在kali2.0中,沒有配置檔案,需要自己寫配置檔案

vim /etc/dns2tcpc.conf


測試是否可以提供服務


這個時候我們就已經配置成功了!成功效果



0x03 分析結論

這個時候的流量走向


本文中介紹的是DNS隧道伺服器,和DNS隧道客戶端是同一臺機器,並不能說明問題,當DNS隧道伺服器存在於防火牆之後,這個時候我們就可以利用此種技術來繞過大部分的防火牆。並且可繞過不開埠,隱蔽性好等;


這裡我使用另外一臺客戶機去連線目標機時,服務端監聽的資料如下:

  • 目標機:192.168.10.133
  • DNS隧道服務端:192.168.10.135
  • DNS隧道客戶端:192.168.10.134
  • DNS伺服器:192.168.10.132


客戶端監聽資料如下:


發現能夠監聽到的ssh資料包是DNS隧道服務端與目標機之間的通訊;
而客戶端與目標機之間的通訊是DNS資料;
這就是簡單的配置DNS隧道;
發在烏雲大家提出了iodine實現的思路,我這裡也做了一個簡單的實驗;

特點:iodine可以通過一臺DNS伺服器製造一個IPv4資料通道,這個工具可幫助滲透測試人員用於穿越防火牆等情景。這款
     工具執行於 Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD和Windows,並需要一個TUN/TAP裝置。同時對頻寬也有一定要求。

下載地址:http://code.kryo.se/iodine/

條件:
伺服器端:需要安裝虛擬網路卡:下載openvpn,安裝TAP-Win32 driver;安裝iodine伺服器端,輸入命令:iodined -c -f IP(設定的虛擬網路卡IP)

dnstunnel.bloodzero.com (這個域名的ns記錄一樣為伺服器端的IP);然後設定一個密碼

客戶端:下載openvpn,安裝TAP-Win32 driver;安裝iodine客戶端,輸入命令:iodined -f -P password(伺服器端設定的密碼)

dnstunnel.bloodzero.com

軟體附件:https://openvpn.net/ 可能需要翻牆

後面還有有關於其他的隧道技術解析~~~

相關文章