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

利用 SQL Server 2005 xp_cmdshell 重置 Windows 管理員密碼應急方案

     編輯:SQL Server 2005

場景背景

Windows 開機密碼遺失、無光碟機、無啟動 USB,但伺服器安裝 SQL Server 2005 且知道 sa 帳密。利用 SQL Server 的 xp_cmdshell / OLE 自動化程序執行系統指令,建立新管理員帳號進入系統重置原密碼。

前置條件

  • SQL Server 服務正在運行。
  • 具備 sysadmin 固定伺服器角色權限(sa 即符合)。
  • 啟用進階選項與 OLE 自動化程序:

EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE;

核心 T-SQL 腳本:建立臨時管理員帳號


DECLARE @shell INT;
EXEC sp_OACreate 'WScript.Shell', @shell OUT;
EXEC sp_OAMethod @shell, 'Run', NULL, 'net user TempAdmin /add';
EXEC sp_OAMethod @shell, 'Run', NULL, 'net localgroup Administrators TempAdmin /add';
  • sp_OACreate 實例化 WScript.Shell COM 物件。
  • sp_OAMethod 呼叫其 Run 方法執行命令列指令。
  • 帳號 TempAdmin 無密碼,直接加入 Administrators 群組。

操作流程

  1. 使用 sa 登入 SSMS,執行上述腳本(訊息頁顯示命令執行完成)。
  2. Windows 登入畫面切換至 TempAdmin(密碼留空),成功進入桌面。
  3. 「電腦管理」→「本地使用者和群組」→「使用者」→ 右鍵 Administrator →「設定密碼」→ 設為空或新密碼。
  4. 任務管理器 →「使用者」分頁 → 右鍵 TempAdmin →「登出」/「中斷連線」。
  5. 重新以 Administrator + 新密碼登入,確認恢復正常。
  6. (建議)清理:刪除 TempAdmin 帳號,關閉 Ole Automation Procedures、xp_cmdshell。

安全性警示與防禦

風險說明
權限提升任何擁有 sysadmin 的 SQL 登入均可執行任意系統指令,相當於本地系統權限。
攻擊面擴大啟用 OLE 自動化/xp_cmdshell 使 SQL Server 成為橫向移動跳板。
審計盲區預設不記錄 sp_OAMethod 執行的具體命令,難以追蹤。

防禦建議:
① 原則上**永久關閉** xp_cmdshell、Ole Automation Procedures。
② 若業務必須使用,限制 sysadmin 成員、啟用稽核、命令白名單、網路隔離。
③ 定期輪換 sa 密碼、禁用 sa、使用 Windows 驗證專用服務帳號啟動 SQL 服務。
④ 作業系統層面強制複雜密碼、鎖定策略、最小權限原則。

總結

此技巧屬「離線應急破解」,僅適用於合法擁有權但遺失密碼的自有伺服器。**嚴禁用於未授權系統**。生產環境務必關閉高風險組件,採用正規密碼重置流程(離線 NTDSUTIL、域控制器重置、雲端控制台重置等)。

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