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

移除 SQL Server 危險內建擴展預存程序與 OLE Automation 程序完整清單

     編輯:關於SqlServer

高風險擴展預存程序 (xp_*)

xp_cmdshell          -- 執行作業系統命令 (最高風險)
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread           -- 讀取登錄
xp_regremovemultistring
xp_regwrite          -- 寫入登錄

OLE Automation 系統預存程序 (sp_OA*)

sp_OACreate
sp_OADestroy
sp_OAMethod
sp_OAGetProperty
sp_OASetProperty
sp_OAGetErrorInfo
sp_OAStop

移除與還原操作

-- 移除 xp_cmdshell
EXEC sp_dropextendedproc 'xp_cmdshell';

-- 查詢對應 DLL (還原時需用)
EXEC sp_helpextendedproc 'xp_cmdshell';
-- 回傳 xpsql70.dll

-- 還原 xp_cmdshell
EXEC sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll';

深度防禦:重命名/刪除 DLL 檔案

移除擴展程序後,攻擊者若取得 sa 權限仍可執行 sp_addextendedproc 重新註冊。必須在檔案系統層面處理:

-- 重命名 DLL (需停止 SQL Server 服務)
REN %ProgramFiles%\Microsoft SQL Server\MSSQL\Binn\xpsql70.dll xpsql70.dll.disabled

-- 或移動至非系統路徑
MOVE xpsql70.dll D:\SecuredBin\

同理處理 odsole70.dll (OLE Automation)、xpstar.dll 等。

自動化稽核腳本

-- 檢查現存危險擴展程序
SELECT name FROM sys.extended_procedures
WHERE name IN ('xp_cmdshell','xp_regread','xp_regwrite','xp_regdeletekey',
               'xp_regenumkeys','xp_regenumvalues','xp_regaddmultistring',
               'xp_regremovemultistring','xp_regdeletevalue');

-- 檢查 OLE Automation 程序是否可用 (嘗試建立物件)
DECLARE @hr int, @obj int;
EXEC @hr = sp_OACreate 'Scripting.FileSystemObject', @obj OUTPUT;
IF @hr = 0 PRINT 'OLE Automation 啟用 - 風險!'; ELSE PRINT 'OLE Automation 已停用';

最佳實務總結

  1. 預設安裝後立即移除上述所有擴展程序與 OLE Automation。
  2. 重命名對應 DLL 檔案防止二次註冊。
  3. 應用程式若確需 xp_cmdshell,改用 CLR 整合 (SQL 2005+) 並限定 EXTERNAL_ACCESS 權限集,或建立獨立代理服務透過 Service Broker/訊息隊列處理。
  4. 定期執行稽核腳本,確保未被惡意恢復。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved