SQL Server 2000 xp_cmdshell移除與回復
SQL Server 2000 xp_cmdshell移除與回復
1.xp_cmdshell是一個延伸預存程序,可以讓T-SQL執行shell command
2.SQL Server 2000 預設是啟用xp_cmdshell,而SQL Server 2005預設是停用的,可使用 [SQL Server 介面區組態] 將此功能啟用
3.預設值只有System Administrator角色可以執行xp_cmdshell
[安全考量]
雖然預設值只有System Administrator角色可以執行xp_cmdshell,當系統不幸遭遇SQL Injection攻擊,而程式沒做進一步的防禦時,而SQL Server安裝時又習慣以本機系統帳戶來啟動SQL Server,此時攻擊者則可以下dir或del等命令取得檔案目錄資訊或刪除檔案等動作,或進一步下net user等命令建立Windows管理員帳戶,或些改OS系統設定,此時等於整台系統都被駭客接管了
因此,如果不需要用到xp_cmdshell,可以考慮將xp_cmdshell移除,以下說明兩種移除法
1.T-SQL Command 移除法
2.Enterprise Manager 移除法(UI圖形介面)
-- [T-SQL Command 移除法]
-- 移除xp_cmdshell, 從SQL Server移除後
-- 更進一步可以把dll檔都刪除,
補充1的命令可以查出dll檔名稱
USE master
GO
EXEC sp_dropextendedproc 'xp_cmdshell'
GO
-- 執行以下命令來測試xp_cmdshell目前是否可用
xp_cmdshell 'dir c:\'
-- 如果將來又需要使用的時候,執行以下回復命令將xp_cmdshell加回來
-- 執行此命令的前提是xplog70.dll檔需存在
USE master
GO
EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'
GO
-- [補充1]:此命令可以查出xp_cmdshell的dll檔的名稱
SELECT o.name,c.text
FROM dbo.syscomments c , dbo.sysobjects o
WHERE c.id=o.id and o.name='xp_cmdshell'
-- [補充2]:此命令可查出有哪些預存程序仍有用到xplog70.dll檔
SELECT o.name,c.text
FROM dbo.syscomments c , dbo.sysobjects o
WHERE c.id=o.id and c.text='xplog70.dll'
-- xplog70.dll的預設路徑是
-- C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll
-- [Enterprise Manager 移除法]
Step1.啟動Enterprise Manager
Step2.依照左圖找到xp_cmdshell
Step4.點選 [顯示依存的情況],此按鈕可顯示目前SQL Server有哪些物件還有用到xp_cmdshell
若沒有顯示任何物件則可進行下一個步驟,若是有顯示依存物件,則需要將依存的問題解決後才進行移除