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

SQL Server sa 權限滲透技術總結:xp_cmdshell 移除與恢復、xplog70.dll 缺失繞過、實戰防禦對策

     編輯:關於SqlServer

本文記錄駭客取得 sa 權限後,如何偵測並恢復被移除的 xp_cmdshell、繞過 xplog70.dll 缺失限制,以及防禦方應採取的根本對策。**僅供授權滲透測試與防禦研究使用**。

一、 偵測 xp_cmdshell 狀態


-- 查詢是否存在
SELECT * FROM sysobjects WHERE xtype = 'X' AND name = 'xp_cmdshell';
-- 嘗試執行
EXEC master..xp_cmdshell 'dir c:\';
-- 若回傳「SQL_ERROR」或「無法找到擴充預存程序」→ 已被移除或 DLL 遺失

二、 恢復 xp_cmdshell (兩種管道)

方法 1:查詢分析器直連執行


EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll';  -- SQL 2000
-- SQL 7.0 用 'xpsql70.dll'

方法 2:SqlExec 類工具 (無管理介面環境)

  • Format 字串設 %s
  • CMD 字串輸入 sp_addextendedproc 'xp_cmdshell','xplog70.dll'
  • 移除指令:sp_dropextendedproc 'xp_cmdshell'

三、 繞過 xplog70.dll 刪除/改名 (核心技巧)

現象

執行 sp_addextendedproc 提示「資料庫中已存在名為 'xp_cmdshell' 的物件」,但實際執行失敗 → DLL 檔案遺失或被替換。

解法:從備份/安裝媒體恢復 DLL

  1. 取得原版 xplog70.dll (SQL 2000 安裝光碟 \x86\binn\、SP4 安裝包、備份伺服器 C:\Program Files\Microsoft SQL Server\MSSQL\Binn\)
  2. 複製至目標伺服器 Binn 目錄
  3. 重新執行 sp_addextendedproc

進階:自訂擴充預存程序 (無 DLL 也能執行命令)

編譯簡單 C++ DLL 匯出 GetCommand 函數,註冊為 xp_mycmd,功能等同 xp_cmdshell 但名稱不同,難被自動化掃描發現。

四、 完整攻擊鏈與防禦對策表

階段駭客行為根本防禦偵測指標
取得 saSQL 注入、弱密碼暴力、提權Windows 驗證、強密碼、帳號鎖定、禁用 sa登入失敗 4625、非預期 IP 登入
偵測 xp_cmdshell查詢 sysobjects、嘗試執行永久移除 sp_dropextendedproc審核 EXECUTE xp_cmdshell
恢復 xp_cmdshellsp_addextendedprocDLL 白名單 (AppLocker)、檔案完整性監控 (FIM)sysobjects 新增 X 型別、Binn 目錄寫入
執行 OS 命令net user、建立排程工作、下載惡意碼服務帳號非管理員、應用程式白名單、網路出站封鎖Process Creation 4688、網路連線

五、 現代環境 (SQL 2005+) 額外防禦

  • xp_cmdshell 預設**停用**,需 sp_configure 'xp_cmdshell', 1; RECONFIGURE; 才能啟用 (需 sysadmin)
  • CLR 整合 取代擴充預存程序:sp_configure 'clr enabled', 1,簽署組件、權限集 EXTERNAL_ACCESS 或 SAFE
  • Policy-Based Management 強制 xp_cmdshell = 0、CLR = 0 合規基線

六、 法律聲明

  • 未經授權存取電腦系統屬違法 (刑法、資安法)
  • 本文技術**僅供**企業內部紅隊演練、授權滲透測試、藍隊防禦強化使用
  • 請遵循負責任揭露流程
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved