mysql之突破secure_file_priv寫shell


在某些情況下,當我們進入了一個網站的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM