在SQL隱碼攻擊中使用DNS獲取資料

wyzsk發表於2020-08-19
作者: Knight · 2015/03/20 15:30

0x00 前言


原文地址: http://arxiv.org/ftp/arxiv/papers/1303/1303.3047.pdf

原文作者: Miroslav Štampar

本文描述了一種利用DNS解析過程獲取惡意SQL查詢結果的先進的SQL隱碼攻擊技術。帶有sql查詢結果的DNS請求最終被攻擊者控制的遠端域名伺服器攔截並提取出寶貴的資料。

開源SQL隱碼攻擊工具—SqlMap現在已經可以自動完成這個任務。隨著SqlMap的升級完成,攻擊者可以使用此技術進行快速而低調的資料檢索,尤其是在其他標準方法失敗的情況下。

0x01 介紹


滲出是一個軍事術語,指的是透過隱蔽手段從敵人的領土內部盜取資產。如今它在計算機上有一個絕佳的用法,指的是非法從一個系統中提取資料。從域名伺服器(DNS)中提取資料的方法被認為是最隱蔽的滲出方法。這種方法甚至可以透過一系列的信任主機以外的內部和外部域名伺服器進行域名查詢而用於沒有公共網路連線的系統。

DNS是一個相對簡單的協議。DNS客戶端傳送的查詢語句和相應的DNS伺服器返回的響應語句都使用相同的基本的DNS訊息格式。除了區傳送為提高其可靠性使用TCP以外,DNS報文都使用UDP封裝。如果有人使用了Wireshark之類的工具監視機器,一個使用了DNS的隱蔽通道看起來像一系列轉瞬即逝的小光點。

從安全系統中轉播DNS查詢到任意基於網際網路的域名伺服器是實現這一不受控制資料通道的基礎。即使我們假設目標主機不被允許連線到公共網路,如果目標主機能夠解析任意域名,資料還是可能可以經由轉發DNS查詢而滲出。

當其他更快的SQL隱碼攻擊(SQLI)資料檢索技術失敗時,攻擊者通常會使用逐位檢索資料的方法,這是一個非常繁雜而費時的流程。因此,攻擊者通常需要傳送成千上萬的請求來獲取一個普通大小的表的內容。我們將要 提到的是一種攻擊者透過利用有漏洞資料庫管理系統(DBMS)發起特製的DNS請求,並在另一端進行攔截來檢索惡意SQL語句結果(例如管理員密碼),每個迴圈可傳輸幾十個結果字元的技術。

0x02 技術分類


根據用於資料檢索的傳輸通道,SQLi可分為三個獨立的類別:inband, inference(推理) 和out-of-band。

Inband技術使用攻擊者和有漏洞的Web應用程式之間現有的渠道來提取資料。通常該通道是標準的Web伺服器響應。它的成員union技術使用現有的web頁面輸出惡意SQL查詢的執行結果,而error-based技術則引發特定的惡意SQL查詢的執行結果的DBMS的錯誤訊息。

相反的,在Inference技術中,攻擊者透過應用程式表現的差異來推斷資料的值。Inference技術能夠逐位提取惡意SQL查詢結果,卻沒有真正傳輸資料。

Inference的核心是在伺服器執行一系列的布林查詢,觀察和最後推導接收結果的含義。根據觀察到的特性,它的成員被稱為布林型盲注(bool)和基於時間(time-based)的盲注技術。在布林型盲注技術中,可見的網路伺服器響應內容的變化被用於區分給定的邏輯問題的答案,

而在基於時間的盲注技術中則透過觀察Web伺服器響應時間的變化來推斷答案。

Out-of-band (OOB)技術,與inband相反,使用其它傳輸通道獲取資料,例如超文字傳輸協議和DNS解析協議。當詳細的錯誤資訊被禁用、結果被限制或過濾、出站過濾規則不嚴和/或當減少查詢的數目變得極度重要時inference技術看起來像是唯一的選擇,這時使用OOB技術滲透便變得十分有趣。例如,基於HTTP的OOB技術的SQL查詢結果變成了傳送給HTTP伺服器請求的一部分(例如GET引數值)被能訪問日誌檔案的攻擊者控制時。此類的技術不像其它的主流技術被廣泛應用,主要是其所需的設定非常複雜,但使用它們可以克服許多障礙(如避免不必要的資料庫寫入和極大地提升利用INSERT/UPDATE語句漏洞的基於時間的SQLI)。

0x03 DNS解析


當一個客戶端需要查詢程式中使用的網路名時,它會查詢DNS伺服器。DNS查詢有許多不同的解析方式:

  • 如果資訊已經被預先用相同的查詢獲得,客戶端可以使用本地快取資訊應答查詢。

  • DNS伺服器可以使用其自己的快取記憶體和/或區記錄的資訊來應答查詢 - 這個過程被稱為迭代。

  • DNS伺服器也可以轉發查詢給代表所請求的客戶端的其他DNS伺服器以全面解析名稱,然後將回應傳送回客戶端 - 這個過程被稱為遞迴。

enter image description here

例如,使用遞迴過程解析名稱test.example.com。這種情況發生於DNS伺服器和客戶端都是第一次啟動且沒有能用來解析域名查詢的本地快取資訊。此外,假設客戶端發起的域名查詢是一個本地沒有其配置區域資訊的域名。

首先,預設的DNS伺服器解析域名的全名並且確定該域名是一個需要知道地址的權威的頂級域名(TLD)伺服器--在這個案例的域名中。然後,它使用迭代(非遞迴)查詢該伺服器來獲得推薦的example.com域。

當它的地址被完成檢索後,被引用的伺服器會被聯接--這實際上是一個註冊example.com域的域名伺服器。因為它所配置的區域包含了查詢的域名,它會將所得到的IP地址作為一個權威響應返回給發起該過程的原始伺服器。

當原始的DNS伺服器接收到所請求的查詢所獲得的權威響應,它轉發該響應回客戶端,遞迴查詢過程結束。 這類的解決方案通常由DNS伺服器嘗試解析DNS客戶端發起的遞迴域名查詢時發起的,並且有時被稱為“遍歷樹”(walking the tree)。

0x04 引發DNS請求


成功利用DNS從有漏洞的資料庫中滲出資料的前提條件是DBMS中有可用的能直接或間接引發DNS解析過程的子程式。 然後這類的子程式被攻擊者利用,作為攻擊的媒介。

任何可以接受網路地址的函式是最有可能被利用來進行這種攻擊的。


4.1 Microsoft SQL Server


擴充套件儲存程式是一個直接執行在微軟的地址空間庫SQL伺服器(MSSQL)的動態連結。有幾個未被公開說明的擴充套件儲存程式對於實現本文的目的特別有用的。

攻擊者可以使用Microsoft Windows通用命名約定(UNC)的檔案和目錄路徑格式利用任何以下擴充套件儲存程式引發DNS地址解析。Windows系統的UNC語法具有通用的形式:


\\ComputerName\SharedFolder\Resource

攻擊者能夠透過使用自定義製作的地址作為計算機名欄位的值引發DNS請求。

4.1.1 master..xp_dirtree

擴充套件儲存程式master..xp_dirtree()用於獲取所有資料夾的列表和給定資料夾內部的子資料夾:


master..xp_dirtree '<dirpath>'

例如,要獲得C:\Windows run:裡的所有資料夾和子資料夾:


EXEC master..xp_dirtree 'C:\Windows';
    

4.1.2 master..xp_fileexist

擴充套件儲存程式master..xp_fileexist()用於確定一個特定的檔案是否存在於硬碟:
xp_fileexist '

相關文章