首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server xp_cmdshell 攻防實戰:移除、恢復與 xplog70.dll 缺失應對技巧

     編輯:MySQL 資料庫相關知識

xp_cmdshell 是 SQL Server 最具爭議的擴充預存程序,允許執行作業系統命令。本文從防禦視角解析如何移除、偵測與恢復 xp_cmdslide,並應對攻擊者常見的 xplog70.dll 刪除/改名繞過手法,屬資安人員必備知識。

核心 T-SQL 操作

-- 移除 xp_cmdshell
IF EXISTS (SELECT * FROM dbo.sysobjects 
           WHERE id = OBJECT_ID(N'[dbo].[xp_cmdshell]') 
           AND OBJECTPROPERTY(id, N'IsExtendedProc') = 1)
  EXEC sp_dropextendedproc N'xp_cmdshell';

-- 新增 xp_cmdshell (SQL 7.0 用 xpsql70.dll, SQL 2000 用 xplog70.dll)
EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll';

攻擊者視角:偵測與恢復手法

現象判斷

  • 遠端工具 (如 SqlExec) 執行 xp_cmdshell 回傳 SQL_ERROR → 可能已被移除。
  • 執行 sp_addextendedproc 提示「資料庫中已存在名為 'xp_cmdshell' 的物件」 → DLL 可能被刪除/改名。

恢復方法一:SQL Query Analyzer 直接執行

EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll';

恢復方法二:SqlExec 類工具注入

  • Format 選項填 %s
  • CMD 選項填 sp_addextendedproc 'xp_cmdshell','xplog70.dll'

進階繞過:xplog70.dll 缺失時的替代方案

若攻擊者發現 xplog70.dll 被刪除/改名,可能嘗試:

  1. 上傳自製惡意 DLL 並註冊為新的擴充預存程序。
  2. 利用 sp_OACreate / sp_OAMethod (OLE Automation) 執行命令。
  3. 利用 SQL Agent 作業 (CmdExec 步驟) 執行命令。
  4. 利用 CLR 整合 (SQL 2005+) 部署組件執行程式碼。

防禦強化清單

措施說明
永久移除 xp_cmdshell生產環境**必須**執行 sp_dropextendedproc
刪除/重命名 xplog70.dll增加攻擊者恢復難度,但非絕對防禦
停用 OLE AutomationEXEC sp_configure 'Ole Automation Procedures', 0; RECONFIGURE;
限制 SQL Agent 權限服務帳號使用最低權限網域帳號,禁止 CmdExec 作業
啟用登入稽核記錄失敗/成功登入,偵測暴力破解
應用層參數化查詢根除 SQL Injection,切斷攻擊入口
法律聲明: 本文僅供防禦教學與滲透測試授權範圍內參考,未經授權對他人系統進行攻擊屬違法行為。

深入理解 xp_cmdshell 機制與攻防對抗,能幫助 DBA 建立纵深防禦,將資料庫伺服器的攻擊面壓縮至最小。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved