Windows 開機密碼遺失、無光碟機、無啟動 USB,但伺服器安裝 SQL Server 2005 且知道 sa 帳密。利用 SQL Server 的 xp_cmdshell / OLE 自動化程序執行系統指令,建立新管理員帳號進入系統重置原密碼。
sysadmin 固定伺服器角色權限(sa 即符合)。
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE;
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 群組。sa 登入 SSMS,執行上述腳本(訊息頁顯示命令執行完成)。TempAdmin(密碼留空),成功進入桌面。Administrator →「設定密碼」→ 設為空或新密碼。TempAdmin →「登出」/「中斷連線」。Administrator + 新密碼登入,確認恢復正常。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、域控制器重置、雲端控制台重置等)。