xp_cmdshell 允許 T-SQL 執行作業系統指令,若落入惡意使用者手中,可建立系統管理員帳號、竊取檔案、植入後門。
-- 1. 新增系統管理員帳號
EXEC master..xp_cmdshell 'net user hacker P@ssw0rd /add'
EXEC master..xp_cmdshell 'net localgroup administrators hacker /add'
-- 2. 列舉磁碟資訊
EXEC master..xp_cmdshell 'dir c:\'
EXEC master..xp_cmdshell 'dir d:\'
-- 3. 開啟遠端桌面、修改防火牆、植入服務...
-- 檢查是否存在
SELECT COUNT(*) FROM master.dbo.sysobjects WHERE xtype='X' AND name='xp_cmdshell'
-- 註冊擴充預存程序
EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'
-- 若 DLL 遺失,上傳至 C:\WinNT\System32\ 後註冊
EXEC master.dbo.addextendedproc 'xp_cmdshell', 'C:/WinNT/System32/xplog70.dll'
EXEC sp_dropextendedproc 'xp_cmdshell'
-- OLE Automation
sp_OACreate, sp_OADestroy, sp_OAGetErrorInfo, sp_OAGetProperty,
sp_OAMethod, sp_OASetProperty, sp_OAStop
-- 登錄存取 (謹慎:影響 SQL Agent、日誌)
xp_regaddmultistring, xp_regdeletekey, xp_regdeletevalue,
xp_regenumvalues, xp_regremovemultistring
-- 危險:直接建立 sysadmin 登入
EXEC master..sp_addlogin 'attacker', 'P@ssw0rd'
EXEC master..sp_addsrvrolemember 'attacker', 'sysadmin'
嚴格審核 sysadmin 角色成員,定期檢視 sp_helpsrvrolemember 'sysadmin'。
xp_cmdshell 是雙面刃,**預設關閉、按需啟用、嚴格審計** 是核心原則。資料庫安全不僅是 SQL 設定,更是作業系統、網路、人員管理的系統工程。