在某些情況下,當我們進入了一個網站的phpMyAdmin時,想通過select into outfile來寫shell,但是通常都會報錯。
這是因為在mysql 5.6.34版本以后 secure_file_priv的值默認為NULL。並且無法用sql語句對其進行修改,只能夠通過以下方式修改
windows下:
修改mysql.ini 文件,在[mysqld] 下添加條目: secure_file_priv =
保存,重啟mysql。
Linux下:
在/etc/my.cnf的[mysqld]下面添加local-infile=0選項。
但是如果這樣的話我們就不能夠寫shell了嗎?答案是否定的。
日志的利用
在php文件包含漏洞中我們有過這種利用方法:攻擊時進行一次附帶代碼的url請求,在日志記錄這次請求之后,通過文件包含漏洞來包含這個日志文件,從而執行請求中的代碼。
mysql也具有日志,我們也可以通過日志來getshell。
mysql日志主要包含:錯誤日志、查詢日志、慢查詢日志、事務日志,日志的詳細情況參考mysql日志詳細解析
我們主要利用慢查詢日志來寫shell,步驟大致分為三步:
1.設置slow_query_log=1.即啟用慢查詢日志(默認禁用)。
set global slow_query_log=1;
2.偽造(修改)slow_query_log_file日志文件的絕對路徑以及文件名
set global slow_query_log_file='dir\filename'
3.向日志文件寫入shell
執行成功
對慢查詢日志的補充:
因為是用的慢查詢日志,所以說只有當查詢語句執行的時間要超過系統默認的時間時,該語句才會被記入進慢查詢日志。
時間默認超過多少的稱為慢查詢日志?
一般都是通過long_query_time選項來設置這個時間值,時間以秒為單位,可以精確到微秒。如果查詢時間超過了這個時間值(默認為10秒),這個查詢語句將被記錄到慢查詢日志中。查看服務器默認時間值方式如下:
show global variables like '%long_query_time%'
通常情況下執行sql語句時的執行時間一般不會超過10s,所以說這個日志文件應該是比較小的,而且默認也是禁用狀態,不會引起管理員的察覺。
參考文章:
mysql日志詳細解析:http://blog.51cto.com/pangge/1319304
MySQL慢查詢日志總結:http://www.cnblogs.com/kerrycode/p/5593204.html